2017-08-22 52 views
1

当我做git checkout origin/bugfix/NTP-183-datefns混帐显示Git结帐差异git结帐来源/ <branch-name>和git结帐<branch-name>?

Note: checking out 'origin/bugfix/NTP-183-datefns'. 

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. 

If you want to create a new branch to retain commits you create, you may 
do so (now or later) by using -b with the checkout command again. Example: 

    git checkout -b <new-branch-name> 

HEAD is now at 6fd089d. 

但是当我尝试git checkout bugfix/NTP-183-datefns

Switched to branch 'bugfix/NTP-183-datefns' 
Your branch is up-to-date with 'origin/bugfix/NTP-183-datefns'. 

这到底是怎么回事?

+0

我不完全确定我理解这个问题。 “这里发生了什么”似乎已经被你已经发布的文本解释得相当好。如果有部分内容您不明白,请解释哪些部分是。只是fyi,你不能检查一个远程分支,这就是为什么当你尝试它时最终处于分离的头部状态。 –

回答

1

origin/<branch-name>是远程分支引用。它不能被修改。
所以当你签出这个引用时,git不能移动你到这个分支,但它会将你移动到分支引用的提交。然后,您处于分离的HEAD状态,这意味着您不在分支上,而是直接在提交上(影响在命令的输出中进行了解释)。

<branch-name>只是一个本地分支,所以你可以在它上面工作。
所以当你签出这个引用时,git将你移动到分支。

有一点提示:如果本地分支<branch-name>不存在,但在所有远程存在一个具有相同名称的远程分支,git会自动创建跟踪远程分支的本地分支并检出它(在这种情况下,git checkout <branch-name>相当于git checkout --track -b <branch-name> any_remote/<branch-name>

+0

这是用'origin'硬编码吗?或者,如果只有一个远程在本地存储库中链接,这是否正常工作? – silvio

+0

不,看起来就像是只有一个参考''在所有遥控器上,git接受它。 – zigarn

1

Git具有与分支机构一起工作的自动功能。默认远程在您的存储库上被称为origin。如果你在命令行中使用远程,git将只检查没有分支的这个分支的提交。您位于detached HEAD state。文字解释了这里发生的事情以及你的复杂情况。

如果你的存储库中只有一个远程配置好了,而你想签出一个来自这个远程的分支,它将为你自动创建一个本地分支。

1

您可以在任何提交(哈希)签出,包括远程分支“指向”的提交。但是,如果您签出由远程分支指向的提交,则您将在本地指向原始提交。

这是警告告诉你的。为了能够做任何有用的事情,你需要在当地的分支机构。检出一个远程分支不会自动生成一个本地分支来处理 - 它只会将你移动到那个提交。做你想做的事,一气呵成:

git checkout -t -b bugfix/NTP-183-datefns origin/bugfix/NTP-183-datefns 

其中:

  • “-t” 使这是一个跟踪分支(这是一个很好的选件)
  • “-b bug修正/ NTP- 183-datefns“创建一个名为bugfix/NTP-183-datefns的本地分支。

这基本上是做你一步到位做了两步,所以它相当于(没有-t选项):

git checkout origin/bugfix/NTP-183-datefns 
git branch bugfix/NTP-183-datefns 
git checkout bugfix/NTP-183-datefns 

这是一样的:

git checkout origin/bugfix/NTP-183-datefns 
git checkout -b bugfix/NTP-183-datefns