Git - 来回移动并致命:您目前不在分支机构?

时间:2017-05-02 21:44:44

标签: git github git-checkout git-reset git-revert

在前后移动以追踪我的回购中的错误,例如:

$ git reset --hard fcf9818

发现错误然后我想继续前进到最新的提交,例如:

$ git checkout 32764bf   

然后,我开始进行更改并想要提交它:

$ git status
HEAD detached at 32764bf
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

我以为我已经是最近的提交了?

但我继续承诺:

$ git add -A
$ git commit
[detached HEAD ccf8009] Fixed gird bug on Safari - removing bootstrap grid css. Added code to centralise the image.
 2 files changed, 6 insertions(+), 1 deletion(-)

现在我有这个错误:

$ git push
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use

    git push origin HEAD:<name-of-remote-branch>

如果我想在后退之后转发到最新的提交,我该怎么办呢?

我现在如何修复错误?

修改

$ git checkout 32764bf
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  6015d59 Fixed gird bug on Safari - removing bootstrap grid css. Added code to centralise the image.

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 6015d59

HEAD is now at 32764bf... Added template for finally - only image.

我仍然得到HEAD detached at 32764b

$ git status
HEAD detached at 32764bf
nothing to commit, working tree clean

2 个答案:

答案 0 :(得分:1)

如果您签出了修订版(不是分支机构)并从那里进行了更正,那么您处于分离的HEAD 状态。为了推送到远程分支,您可以创建一个分支并将其推送到远程或(如消息所示)push指定要推送到哪个远程分支:git push a-remote HEAD:remote-branch -name

答案 1 :(得分:1)

假设有一个分支 master ,它指向一个提交 32764bf

  1. git checkout master
  2. 现在你在分公司主人。进行新提交时,ref master将移至新提交。参考HEAD也是如此。当您运行git reset --hard <commit>时,master和HEAD都会移动到该提交。 git push隐含git push origin master:master,相当于git push origin HEAD:master

    1. git checkout 32764bf
    2. 现在你是一个独立的HEAD。把它作为一个无名的分支,这是一个新的掌握。当您进行新提交时,HEAD将移至新提交,但master仍指向32764bf。当您运行git reset --hard <commit>时。只有HEAD移动到该提交并且master保持静止。 git push不能暗示git push origin master:master,因为您现在不在分支主人身上。让我们说现在HEAD指向8977abf。您可以运行git push origin HEAD:mastergit push origin 8977abf:master来更新远程存储库中的主服务器,但本地主服务器未更改,仍指向32764bf。显然,这两个推送与git push origin master:mastergit push origin 32764bf:master不同,因为现在HEAD和master指向不同的提交。即使现在HEAD和master指向同一个提交,处于分离的HEAD并且在分支master上也是两种不同的状态。