2012-01-27 14 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

答えて

30

はあなたがマスターに残っていると仮定:

git merge 7c09e17 

は十分なはずです。 gitは、端末を見ているとコミットIDを伝えるのが普通です。

+0

チェックアウトマスター、gitマージ7c09e17、gitチェックアウトマスター、git push、それを解決するようです、ありがとう! – NoBugs

+0

、好奇心のため、私のローカルマシン上でこれらのコミットをすべて表示/キャンセルする方法はありますか? – NoBugs

+8

@NoBugs、ブランチにコミットしていないすべてのコミットを表示したい場合は、 'git fsck --unreachable --no-reflogs'が必要です。 –

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 

私の状況はそれで少し違っていた私は、コミットデタッチHEAD状態で非常に古いからスタートしながら、コミットしていました。

私は単にmasterに(I をしていたところである別名ec31ccf、)ec31ccf0735240d0cdc5a44fd443039c3caa43f0をマージしたい場合は、私がgit merge ec31ccfgit rebase ec31ccfが働いているかもしれないと思います。 しかし、これは私のケースでは(マージの競合などを含む)ほとんどの古代の歴史を併合することになります。

代わりに、私はec31ccfで行ったことを回復したいと考えており、git cherry-pick ec31ccfはうまく機能していました。

関連する問題