2012-05-07 82 views
8

我有一个严重的问题试图做我的回购git rebase --interactive。我得到了神秘的错误fatal: ref HEAD is not a symbolic ref,并且我的rebase停止运作。我必须git rebase --abort才能恢复到良好的状态。我不能git rebase - 交互

以下是输出(S)我收到:https://gist.github.com/d38f1e2d2ec9bc480b6f

我已经在过去被告知的是,这是由于这样的事实,我在“分离的头”模式,但如何将如果我处于这种模式,我首先得到了rebase?我肯定从master开始,然后运行git rebase --interactive并将git-rebase-todo文本文件修改为我想要的。然后这个错误发生。

我已经问过大家在这里工作,还有一些人在freenode上@ #git。似乎没有人真正理解我的问题或知道解决方案是什么。谷歌搜索该错误没有产生任何东西,相关的搜索StackOverflow没有证明。我似乎无法弄清楚这一点,从压制每一次我推动主人到现在推动我作为自己单独提交的每一个小小改变,这真的很蹩脚。

+0

这里描述了一个成功的rebase -i:http://davidstechtips.com/2011/03/collapsing-commits-in-git/。在你的情况下,尝试'git checkout master VonC

+1

这可能是因为你仍然处于之前的重新生成过程中,它在重新处理期间将头部分开。在固定当前互动步骤的热潮中,这可能会很容易发生,你可能会分心。我刚刚完成了一个基础工作,在那里我做了很多工作(很多小步骤),但最终为每一步都做了一个单独的“rebase -i”,这样我就不会迷路了。启动git-gui和gitk visualiser也会有所帮助。 [请确保你开始在你自己的本地分支] –

+0

你可以通过查看'.git/HEAD'的内容来确定你是否实际处于分离HEAD模式。如果它包含像“ref:refs/heads/......“你不是在分离的HEAD模式。另一方面,如果它包含一个SHA-ID(例如一串字母和数字),你确实处于分离的HEAD模式。 –

回答

3

在'git rebase'期间,您正在重新绑定的引用被检出。如果这个裁判是一个提交,那么你会得到一个分离的头;如果它是分支引用,那么该分支被检出。如果在提交过程中发生致命错误,那么您将留下一个工作目录处于消失状态。例如,如果您在Foo分支上,并且您尝试重新绑定Bar,那么在发生致命错误后,您将在Bar或Bar后的某个位置应用几次rebase提交。您只需简单地检查Foo即可恢复。

git rebase --abort 

,或者,如果底垫真的楔形(见下文参考),如:

git checkout -f Foo 

之后,你可以放心地再次尝试重订,试图调试为什么发生FATAL。 Here是当内存耗尽并且'git rebase --abort'不起作用时rebase失败的情况。

+1

使用'git checkout -f'不能解决我的问题。我一直在做'git rebase --abort'每次都要摆脱rebase。下面是我尝试'git checkout -f'时得到的结果:https://gist.github.com/4d3aa867602f1e438e9b – tubbo

+0

这是由于我使用'git-tracker'。抱歉!! – tubbo

+0

使用'git rebase --abort'是首选方法;但它并不总是有效(请参阅参考资料) – GoZoner