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

我试图按照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) 

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

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

现在,通过跑步

 git checkout origin/web-zach 

你正试图检查一个名为origin/web-zach远程跟踪分支; 这是一个特殊types的分支,在你的仓库本地,跟踪相应的分支, web-zach ,住在远程仓库中,叫做origin

但是HEAD引用(在地图上可以认为是You are here标记) 不能指向远程跟踪分支。 只有“正常”的本地分支,或直接提交。 当您尝试检出一个远程跟踪分支时, HEAD引用结束直接指向远程跟踪分支的末端 (即该远程跟踪分支指向的提交):

在这里输入图像描述

HEAD不指向“正常”本地分支时, 直接指向提交时,最终会出现所谓的“分离HEAD状态”。 这不是世界的尽头,但是尽可能地避免在这个状态下(至less在Git学习开始的时候)可能会给你带来一些惊喜。

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

 git checkout -b web-zach 

然后, HEAD将指向新创build的本地分支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) 

之后,你可以自由地进行修改,分级,提交和(如果你有写访问远程回购对应的origin并没有其他人已经推动任何东西的origin/web-zach自上次的git fetch ) ,推,使用

 git push -u origin web-zach