我正在学习git reset
命令。`git reset HEAD`和`git reset HEAD〜'之间有什么区别吗?
我只是想知道,git reset HEAD
与git reset HEAD~
有什么区别。
这些命令是通过两种方式实现的吗?或者它们之间只有在特定条件下才能观察到的差异?
当我在相同情况下运行这两个命令时,它们似乎表现相同,但为了避免陷阱,我只是在问这个问题才能确定。
我正在学习git reset
命令。`git reset HEAD`和`git reset HEAD〜'之间有什么区别吗?
我只是想知道,git reset HEAD
与git reset HEAD~
有什么区别。
这些命令是通过两种方式实现的吗?或者它们之间只有在特定条件下才能观察到的差异?
当我在相同情况下运行这两个命令时,它们似乎表现相同,但为了避免陷阱,我只是在问这个问题才能确定。
如果您只有一个提交,它们是相同的,否则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之前,你回滚到了。
运行
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
检索一方面被撤消,git reset COMMIT
(的git reset --mixed COMMIT
当量)指:
HEAD
参考点COMMIT
COMMIT
树(git reset
在Reset Demystified充分解释)
在另一方面:
HEAD
表示当前承诺HEAD~
代表的HEAD
始祖(的~
含义的git revisions文档中解释,看一下例子在本节结束以更好地理解)
当你把两个:
git reset HEAD
:简单复位指数git reset HEAD~
:移动到以前的承诺和重置相应在这两种情况下,您的工作目录都不会受到影响。
'HEAD〜'是'HEAD'的第一个父项。确保你在repo中至少有两个提交,你会看到更改。 – axiac
嗨@axiac,谢谢你的评论。因此,从你说的话来看,我猜'git reset HEAD'和'git reset HEAD ~'意思相同,即它们都意味着:使'HEAD'指针指向'HEAD'当前指向的提交的父提交至?我的理解是否正确? – Thor
编号'HEAD〜'与'HEAD'不同。 – axiac