在git中检索丢失的HEAD分支

时间:2013-12-28 13:17:27

标签: git version-control merge

我有一个非常简单的Git项目,只有一个Master分支而且没有起源。

在某个地方,我意外地在我的项目中创建了一个分离的HEAD,然后在该分离的HEAD上进行了一系列提交后,尝试将其合并回我的Master分支。我在SourceTree中这样做,起初合并似乎工作(图表显示主人进入头部,并且我修复了合并冲突),但随后我双击Master切换到该分支然后突然我的HEAD消失了。我无法在所有分支下的SourceTree中找到它,并且命令行上的git branchgit log也只显示我的主分支。

无论如何都要从丢失的独立HEAD中取回我的提交?

2 个答案:

答案 0 :(得分:41)

这对我有用:

  1. 使用git reflog命令查找消失的头版本。
  2. 使用git checkout @{-1}将HEAD移回已消失的那个。数字-X是从当前头部消失的提交数量。 -1表示消失的版本1提交远离当前的HEAD。
  3. 创建分支以保存已消失的版本

答案 1 :(得分:38)

  

我在SourceTree的任何地方都找不到它

返回命令行界面并执行git reflog 您应该能够在该日志中找回HEAD的SHA1。

请注意,您不需要将已分离的HEAD分支“合并”回主控。

您可以将master重置为当前已分离的HEAD提交 请参阅“How to fix a Git detached head?

git checkout master

以纯SourceTree方式(as in this thread

http://edwon.tv/wordpress/wp-content/uploads/2012/09/Screen-Shot-2012-10-15-at-4.15.22-PM.png

  

您也可以检出现有分支,然后右键单击最新提交并选择Reset <branch>进行此提交,将分支指针移动到您希望的位置。

     

当显示HEAD时,表示您处于分离的HEAD状态,这意味着您没有检出分支,并且任何提交在创建时都不会移动任何分支。如果你在SourceTree中签出一个分离的HEAD,它会很明显地警告你,所以也许这是事先在命令行上完成的,你在SourceTree中看到了后效。

替代:

  

使用new branch命令从我的“HEAD”分支(根本不是分支)创建分支。那时头不见了   然后我能够将该分支与master合并,并删除我从HEAD创建的不需要的分支。