什么应该重新分离HEAD到BRANCH呢?

时间:2015-03-28 17:36:51

标签: git git-reset

如果我理解正确,当你有一个分离的头(HEAD->提交), 然后git CHECKOUT分支解决了这个问题(HEAD-> branch [ - > someCommit])

但是重置到分支有什么作用呢?它应该设置一个对象(通常是一个分支)的指针,HEAD指向另一个分支。 但是既然我们没有这个中间人(分支) - 它会做什么呢?为什么?

1 个答案:

答案 0 :(得分:1)

它简单地移动HEAD:正如我在" Practical uses of git reset --soft?"中提到的那样:

  

git reset就是移动HEAD。

如果您将HEAD移至另一个提交,则HEAD仍为detached

关于git resetgit checkout之间的区别a discussionsymbolic reference HEAD的分离或附加性质之后的{{3}}之后,我们共同发现了这一点:

  • 如果HEAD指向分支,git reset会将分支移动到<something>:重置它不会使其分离,它会更改分支HEAD
  • 如果HEAD指向提交(已经分离),那么它将保持分离:正如OP所说:
  

所以当分离并且我调用git reset <branch>时,它会在分支后面找到提交,并在.git/HEAD中为<branch>引用的提交更改提交。

让我们考虑一个附加到branch1的HEAD(cat .git/HEAD会返回branch1):

  • git checkout branch2会将HEAD更改为branch2并保持branch1不变
  • git reset branch2会将branch1 HEAD重置为branch2cat .git/refs/heads/branch1包含与branch2相同的SHA1。

这就是区别:

  • 重置移动HEAD(正如我在开始时所说:它完全是关于移动HEAD)
  • checkout切换分支(或分离HEAD)

关于HEAD的附加/分离性质:

  • 重置并不会改变HEAD的性质(如果已连接,它仍保持连接状态)
  • checkout可以改变HEAD的性质(如果附加了,你签出提交而不是分支,HEAD就会分离)