2017-08-17 94 views
1

我正在学习git reset命令。`git reset HEAD`和`git reset HEAD〜'之间有什么区别吗?

我只是想知道,git reset HEADgit reset HEAD~有什么区别。

这些命令是通过两种方式实现的吗?或者它们之间只有在特定条件下才能观察到的差异?

当我在相同情况下运行这两个命令时,它们似乎表现相同,但为了避免陷阱,我只是在问这个问题才能确定。

+2

'HEAD〜'是'HEAD'的第一个父项。确保你在repo中至少有两个提交,你会看到更改。 – axiac

+0

嗨@axiac,谢谢你的评论。因此,从你说的话来看,我猜'git reset HEAD'和'git reset HEAD ~'意思相同,即它们都意味着:使'HEAD'指针指向'HEAD'当前指向的提交的父提交至?我的理解是否正确? – Thor

+0

编号'HEAD〜'与'HEAD'不同。 – axiac

回答

2

如果您只有一个提交,它们是相同的,否则HEAD~将始终引用提交的第一个父代。

此外,我可以建议一些有趣的阅读git reset

git reset HEAD unrolls to git reset --mixed HEAD。从--mixed

的文档,以便git reset HEAD~将展开以git reset --mixed HEAD~1这意味着Reset the HEAD's first parent with the --mixed option

--mixed 重置索引而不是工作树(即更改的文件被保留,但不标记为提交)并报告尚未更新的内容。这是默认操作。

我现在指的是非常好的博客条目git reset demystified注意事项:从这篇博客文章中,我终于明白了重置是如何工作的。

现在再来看看THAT图并且意识到它做了什么。它仍然解开了你的最后一次提交,但是也取消了一切。在你运行你所有的git add和git commit之前,你回滚到了。

+2

'HEAD^1'与'HEAD'不一样。 – axiac

+0

是的,我尝试了一些东西后意识到了,我更新了我的介绍。你还好吗或者其他提示? – ckruczek

+0

嗨ckruczek,感谢您的链接!我瞥了一眼,看起来很好。 – Thor

1

运行

git reset HEAD~ 
git reset HEAD 

第二命令没有影响,因为之后的第一个新的HEAD是以前HEAD〜。 看到

git rev-parse HEAD HEAD~ HEAD^@ 

注意git reset HEAD~可以与

git reset [email protected]{n} 

其中n可以通过git reflog

2

检索一方面被撤消,git reset COMMIT(的git reset --mixed COMMIT当量)指:

  1. 移动HEAD参考点COMMIT
  2. 重置索引的COMMIT

树(git resetReset Demystified充分解释)

在另一方面:

  • HEAD表示当前承诺
  • HEAD~代表的HEAD

始祖(的~含义的git revisions文档中解释,看一下例子在本节结束以更好地理解)

当你把两个:

  • git reset HEAD:简单复位指数
  • git reset HEAD~:移动到以前的承诺和重置相应
  • 01指数

在这两种情况下,您的工作目录都不会受到影响。

相关问题