2012-02-17 54 views
17

我做了几十个我认为是我的分支的提交,然后检出了另一个分支。Git/detached HEAD,让工作回来?

愿意回到我最初的分支,我没有找到我的更新的代码。看着我的控制台历史记录后,我明白我在一个超脱分公司工作...

是它在某种程度上可能得到我上分离的分支所做的工作?

回答

23

是的。你可以使用reflog。尝试git log -g HEAD。这会向您显示HEAD的引用日志,即HEAD指出的每一次提交,以及它更改为该提交的原因。您应该能够找到检出分支的命令,并查看之前的提交是什么。

您也可以使用其他的语法索引到引用日志。如果你只是执行git checkout branch,然后[email protected]{1}将参考以前签出的提交(这样你就可以git checkout [email protected]{1}找回它)。或者如果您知道10分钟前HEAD指向正确的东西,则可以使用git checkout [email protected]{10.minutes.ago}

+2

非常感谢,你只是保存了4个小时的工作.... – apneadiving 2012-02-17 00:33:59

+0

@apneadiving:你实际上已经提交给git的任何东西都可以稍后检索。在未引用的提交对象实际上被垃圾收集之前大约需要1.5个月的时间(1个月不在reflog中,另外2个星期在被删除之前)。最糟糕的情况是你可以用'git fsck --lost-found'找到这些对象。 – 2012-02-17 00:47:19

+0

好的再次感谢这些细节。 – apneadiving 2012-02-17 00:47:57

9

放松,一切都还在那里:)

只需拨打

git reflog 

git会告诉你什么之前提交HEAD指出。将有一条线如

checkout: moving from c70e36e25ac2dbedde6cb376719381fe0ab53f19 to master 

告诉你提交的提示的SHA1与分离的头。创建一个新的分支指向使用

git branch saved-commits c70e36e25ac2dbedde6cb376719381fe0ab53f19 

现在你可以变基的分支顶部的提交本应该去那个分支提示。

+0

非常感谢你也一样,非常珍贵的有互补的答案。 – apneadiving 2012-02-17 00:34:27