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

时间:2014-09-04 16:05:43

标签: git git-checkout remote-branch

我试图按照Git: "Not currently on any branch." Is there an easy way to get back on a branch, while keeping the changes?的说明操作,但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似乎没有在这里做任何事情......那个命令的全部目的不是把我放在一个分支上吗?我怎样才能回到分支并再次提交/推送?

2 个答案:

答案 0 :(得分:41)

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

现在,通过运行

git checkout origin/web-zach

您正在尝试查看名为origin/web-zach远程跟踪分支;它是您的仓库本地的一种特殊类型的分支,用于跟踪位于名为web-zach的远程存储库中的相应分支origin

但是,HEAD引用(您可以将其视为地图上的 You-are-here 标记)无法指向远程 - 跟踪分支;只有#&#34;正常&#34;本地分支,或直接提交。当您尝试签出远程跟踪分支时,HEAD引用最终将直接指向远程跟踪分支的 tip (即提交远程跟踪分支指向的地方):

enter image description here

HEAD未指向&#34;正常&#34;本地分支,但直接指向提交 ,最终处于所谓的&#34; detached-HEAD状态&#34;。它不是世界末日,但尽可能避免在该州登陆(至少在你的Git学习开始时)可能会给你带来一些惊喜。

要解决此问题,您需要将HEAD重新附加到某个本地分支。在这里,您可能想要通过运行来创建和签出这样的本地分支,例如

git checkout -b web-zach

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

enter image description here

然后,你应该

$ 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对应的远程仓库具有写入权限,并且没有其他任何人将任何内容推送到{{ 1}}自上次origin/web-zach)以来,使用

推送
git fetch

答案 1 :(得分:0)

我还想添加,为了使命令起作用,您必须在推送之前提交更改。

git checkout -b web-zach
git status
git commit -a -m "Added new commands Changes"
git push -u origin web-zach