为什么Git在运行"git checkout origin/<branch>"后告诉我"当前不在任何分支上"?

hub*_*ish 18 git remote-branch git-checkout

我试图按照Git的说明:"目前不在任何分支上." 有没有一种简单的方法可以回到分支上,同时保持变化?git checkout似乎被打破了:

$ git checkout origin/web-zach
HEAD is now at 1366cb1... Changed so css files not ignored

$ git status
# Not currently on any branch.
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .cordova/config.xml
#       www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)
Run Code Online (Sandbox Code Playgroud)

更具体地说,我担心"目前没有任何分支"的消息.git checkout在这里似乎没有做任何事情......这个命令的全部目的不是把我放在树枝上吗?我怎样才能回到分支并再次提交/推送?

jub*_*0bs 44

输出git status表明您的工作目录是干净的; 好.

现在,通过运行

git checkout origin/web-zach
Run Code Online (Sandbox Code Playgroud)

你试图检查一个名为的远程跟踪分支origin/web-zach; 它是一种特殊类型的分支,在您web-zach的仓库本地,跟踪相应的分支,生活在名为的远程仓库中origin.

但是,HEAD引用(您可以将其视为地图上的" 你在这里"标记)无法指向远程跟踪分支; 仅限于"普通"本地分支,或直接提交.当试图检查出一个远程跟踪分支,所述HEAD参考结束指向直接尖端远程跟踪分支的(即,提交到远程跟踪分支点):

在此输入图像描述

如果HEAD没有指向"普通"本地分支,但直接指向提交,则最终处于所谓的"分离-HEAD状态".这不是世界末日,但尽可能避免在该州登陆(至少在你的Git学习开始时)可能会给你带来一些惊喜.

要纠正这种情况,您需要重新连接HEAD到某个本地分支.在这里,您可能希望通过运行来创建和签出这样的本地分支

git checkout -b web-zach
Run Code Online (Sandbox Code Playgroud)

HEAD然后将指向新创建的本地分支web-zach:

在此输入图像描述

然后,你应该得到

$ git status
On branch web-zach
Untracked files:
  (use "git add <file>..." to include in what will be committed)
      .cordova/config.xml
      www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)
Run Code Online (Sandbox Code Playgroud)

之后,您可以自由地进行更改,暂存,提交,并且(如果您具有对应的远程仓库的写入权限,origin并且origin/web-zach自上次以来没有其他任何人推送过任何内容git fetch),推送,使用

git push -u origin web-zach
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这真的很有帮助!我按照你的指示,一切似乎都按照你的说法工作.我在本地分支web-zach上 - 是不是可以"在"远程分支上? (2认同)