2012-01-27 65 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上完成的工作。