当我像这样检查 branch2
时,我在 branch1
上(两个分支都存在)。
git checkout origin/branch2
然后我得到一个分离的头错误:
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
但是我只是检查 branch2
(没有 origin
)然后它工作正常:
git checkout branch2
那么 git checkout
有和没有 origin/
有什么区别?为什么在使用 origin/
时出现 detached HEAD
错误?
最佳答案
“detached HEAD”消息是警告,不是错误。
原因很简单。 Git 有两种关于分支的状态:
- 在分支机构,或
- 不在分支机构。
当您在分支上进行新提交时,分支会自动前进以包含新提交。
当您不在一个分支上并进行新的提交时,非分支也会前进,但是——这是警告的原因——如果你随后切换到其他分支(这样你在上面),git 忘记你在哪里。1 当你在一个分支上时,分支名称会记住新的提交;当你不在时,就没有什么可以记住它们了。
你不能在远程跟踪分支上
分支 origin/branch2
是一个远程跟踪分支:也就是说,一个分支会记住“branch2
在 上的位置” >origin
上次我们(我们的 git 和 origin
的 git)讨论了分支”。因为这样做的目的是跟踪他们在哪里,git不会让你“进入”那个分支并进行新的提交(然后它会记住你在哪里而不是他们所在的地方)。
因为你不能在上面,所以检查它会给你“分离的 HEAD”状态。
但是你可以在普通的(本地)分支上
分支 branch2
是一个普通的本地分支。随心所欲。您可以开始并做出新的 promise 。
(您的本地分支也可以记住远程跟踪分支,作为其所谓的上游。Git 对此的混淆术语是您的本地分支然后“跟踪”远程跟踪分支."tracking"这个词在这里出现的次数太多了,"branch"这个词也出现了太多次,都是不同的含义。)
1实际上它会保存一段时间,在 HEAD
的 reflog 中,但默认情况下只能保存 30 天。
关于git checkout my_branch 与 git checkout origin/my_branch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145400/