Git:HEAD已经消失了,想把它合并成主人

Sam*_*ody 7 git

reflog vs GITK http://siteroller.net/archive/images/Forums/headless%20GIT.png

顶部图像是输出:git reflog.
底部是GIT GUI(msysgit)中的GITK在查看所有分支历史时向我显示的内容.

最后几次提交没有在GIT GUI上显示.

  • 为什么他们不在GITK上展示(至少作为一个分支或什么)?
  • 如何将它们合并为主?
  • 当我检查标签0.42时,我收集了这个.为什么和主人不一样?(我在最新状态下标记了主人)
  • 当我点击推送时,为什么远程仓库声称是最新的...它不应该尝试将这些提交更新到它们所在的任何分支中吗?

第一个问题很重要 - 我想开始了解GIT的想法.在这一点上,它比逻辑更具神谕性.

如果看到之前的历史记录有所不同,那么该项目是一个[非常强大的] JS颜色选择器,可以在这里完整地查看.

Von*_*onC 11

为什么要将这些提交更新为它们所在的分支?

就是这样:你不在任何一个分支上,但目前在一个独立的头上工作:

从版本1.5.0开始,上面的命令将您HEAD从当前分支中分离出来,并直接指向由标记命名的提交.

如果你这样做,你可能会看到它 gitk --all

修复它的一种方法(如果你已经提交了所有东西)

$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>
Run Code Online (Sandbox Code Playgroud)

另一种方法是将您的工作合并到恰好位于标签处的当前主HEAD:

 $ git checkout -m 0.42
Run Code Online (Sandbox Code Playgroud)

但这会破坏你在一个独立的HEAD上做出的承诺的历史.


当我检查标签0.42时,我收集了这个.为什么和主人不一样?(我在最新状态下标记了主人)

不,它与主人不一样.正如Jefromi在评论中指出的那样,分支可以移动(或重命名,删除,或......)
master指的是与'0.42'标签相同的提交,但情况并非总是如此.
通过签出标签,您不会签出分支,因此"分离的HEAD"状态.


注意:正如本SO答案中所提到的,@{1}您看到的符号是$(git symbolic-ref HEAD)@{1},即它使用reflog用于当前(此处为分离的)分支,而不是HEAD reflog.