21

我试图遵循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这里似乎没有做任何事情......该命令的全部目的不就是把我放在树枝上吗?我怎样才能回到分支并再次提交/推送?

4

2 回答 2

50

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

现在,通过运行

git checkout origin/web-zach

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

但是,HEAD引用(您可以将其视为地图上的“您在这里”标记)不能指向远程跟踪分支;仅对“正常”本地分支,或直接提交。当您尝试签出远程跟踪分支时,HEAD引用最终直接指向远程跟踪分支的尖端(即该远程跟踪分支指向的提交):

在此处输入图像描述

HEAD不指向“正常”本地分支,而是直接指向提交时,您最终会处于所谓的“分离头状态”。这不是世界末日,但尽可能避免进入那种状态(至少在你刚开始学习 Git 时)可能会让你感到意外。

为了纠正这种情况,您需要重新连接HEAD到某个本地分支。在这里,您可能想要创建并签出这样的本地分支,例如通过运行

git checkout -b web-zach

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)

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

git push -u origin web-zach
于 2014-09-04T16:11:41.630 回答
0

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

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

于 2021-02-07T04:28:39.127 回答