git checkout my_branch vs. git checkout origin / my_branch

时间:2016-02-02 05:00:39

标签: git

当我像这样结帐branch1时,我就在branch2(两个分支都存在)。

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/之间的区别是什么?以及使用detached HEAD时出现origin/错误的原因?

2 个答案:

答案 0 :(得分:16)

“分离的HEAD”消息是警告,而不是错误。

它的原因很简单。 Git有两个关于分支的状态:

  • 在分支机构上,或
  • 不在树枝上。

当您在分支机构上并进行新的提交时,分支会自动前进以包含新的提交。

当你在一个分支上并进行新的提交时,非分支也会前进,但是 - 这是警告的原因 - 如果你然后切换到其他分支(这样你在它上面),git 忘记你在哪里 1 当你在一个分支上时,分支名称会记住新的提交;当你不在时,没有什么可以记住它们。

您不能进入远程跟踪分支

分支origin/branch2是一个远程跟踪分支:也就是说,一个分支会记住上次我们branch2 origin上的位置{我们的git和origin的git)谈到了分支“。因为这一点是为了跟踪他们所在的位置,git不会让你“接通”那个分支并进行新的提交(然后会记住的位置)而不是他们的地方。)

因为您不能使用它,所以检查它会为您提供“分离的HEAD”状态。

但你可以在正常(本地)分支

分支branch2是普通的普通本地分支。你可以按照自己的意愿去做。你可以使用它并进行新的提交。

(您的本地分支也可以记住远程跟踪分支,因为它的所谓上游 .Git令人困惑的术语是,您的本地分支随后“跟踪”远程跟踪分支“跟踪”这个词在这里出现的次数太多了,“分支”这个词的含义也各不相同。)

1 实际上它会在HEAD reflog 中保存一段时间,但默认情况下这只会持续30天。

答案 1 :(得分:2)

你应该使用git checkout --track origin/branch2创建branch2的本地分支,跟踪远程origin/branch2