如果我理解正确,当你有一个分离的头(HEAD->提交), 然后git CHECKOUT分支解决了这个问题(HEAD-> branch [ - > someCommit])
但是重置到分支有什么作用呢?它应该设置一个对象(通常是一个分支)的指针,HEAD指向另一个分支。 但是既然我们没有这个中间人(分支) - 它会做什么呢?为什么?
答案 0 :(得分:1)
它简单地移动HEAD:正如我在" Practical uses of git reset --soft
?"中提到的那样:
git reset
就是移动HEAD。
如果您将HEAD移至另一个提交,则HEAD仍为detached。
关于git reset
与git checkout
之间的区别a discussion与symbolic reference HEAD的分离或附加性质之后的{{3}}之后,我们共同发现了这一点:
git reset
会将分支移动到<something>
:重置它不会使其分离,它会更改分支HEAD 所以当分离并且我调用
git reset <branch>
时,它会在分支后面找到提交,并在.git/HEAD
中为<branch>
引用的提交更改提交。
让我们考虑一个附加到branch1的HEAD(cat .git/HEAD
会返回branch1
):
git checkout branch2
会将HEAD更改为branch2
并保持branch1
不变git reset branch2
会将branch1
HEAD重置为branch2
:cat .git/refs/heads/branch1
包含与branch2
相同的SHA1。这就是区别:
关于HEAD的附加/分离性质: