2012-01-27 36 views
17

我用更新检出了另一个分支,然后做了一些更改,切换回主Git,现在变化消失了!我可以让他们回来吗?终端基本上是:如何从'分离头状态'恢复提交?

$ git commit 
[detached HEAD 7c09e17] Fixed some stuff 
    files changed, insertions(+), deletions(-) 
$ git push master 
fatal: 'master' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
$ git checkout master 
Previous HEAD position was 7c09e17... Fixed some stuff 
Switched to branch 'master' 
$ git merge theother/directory 
+0

dup http://stackoverflow.com/questions/4845505/gitx-how-do-i-get-my-detached-head-commits-back-into-master? – smparkes 2012-01-27 22:56:19

回答

30

假设你还在主:

git merge 7c09e17 

应该够了。如果你看终端,git通常会告诉你提交ID。

+0

checkout master,git merge 7c09e17,git checkout master,git push,似乎解决了它,谢谢! – NoBugs 2012-01-27 23:10:40

+0

,出于好奇,有没有办法在本地机器上查看/取消所有这些提交? – NoBugs 2012-01-28 00:40:32

+8

@NoBugs,如果你想看到所有悬而未决的提交(不在分支上提交),我想你想'git fsck --unreachable --no-reflogs'。 – 2012-01-28 00:47:01

7

我有一个类似的问题。我发现git reflog是一个救生员。在情况下,它有助于说明它用,这里的输出:

e3191c5 [email protected]{0}: checkout: moving from ec31ccf0735240d0cdc5a44fd443039c3caa43f0 to master 
ec31ccf [email protected]{1}: commit: Added code and data for simulation. 
781b9ee [email protected]{2}: checkout: moving from 3bd804e635b913840c71b7f8a33665460580d45f to 781b 
3bd804e [email protected]{3}: checkout: moving from master to 3bd804 

我的情况是,一个有点不同的我做了,而在一个分离的头状态从一个非常古老的开始提交提交。

如果我只是想合并ec31ccf0735240d0cdc5a44fd443039c3caa43f0(又名ec31ccf,这是我已经)到master,我觉得git merge ec31ccfgit rebase ec31ccf本来是可行的。 但在我的情况下,这大部分会融合古代历史(与合并冲突等)。

相反,我只是想恢复我在ec31ccfgit cherry-pick ec31ccf上完成的工作。