LoginSignup
81
60

More than 5 years have passed since last update.

git でコミットが消えた場合に簡単に復帰する方法

Posted at

 git 初心者がよくやってしまう失敗だと思います。git のブランチというものを把握すればなんてことのない問題なので、再度失敗しないようにまずは git のブランチについてよく理解することが必要です。
 さて、このコミットが消えた、という状態ですが、ようするにコミットがどのブランチにも所属していないため、ログに表示されていない状態となります。
 このようなコミットは git reflog コマンドを使えば追うことができます。

$ git reflog
8598194 HEAD@{1}: commit: 4
a734caa HEAD@{2}: commit: 3
5e85532 HEAD@{3}: checkout: moving from caseB to 5e85532
5e85532 HEAD@{4}: checkout: moving from master to caseB
18de528 HEAD@{5}: checkout: moving from caseB to master
5e85532 HEAD@{6}: checkout: moving from master to caseB
18de528 HEAD@{7}: reset: moving to HEAD^
5e85532 HEAD@{8}: commit: 2
18de528 HEAD@{9}: commit (initial): 1

これで見えなくなっているコミットを探し、ハッシュでコミットを取り出すことができます。
 上記のケースでは、a734caa->8598194 の二つがブランチに含まれていないものとします。

lostbranch0_300.png

よくある対処法

 まず、取り出す方法としてよく説明されているのが cherry-pick を使う方法です。これは、取り出すコミットが一つや二つの場合にはいいですが、コミットが多いと取り出すのが大変です。また、順番も間違えないように気をつける必要があります。

$ git checkout master (コミットを追加できるブランチに移動する)
$ git cherry-pick a734caa (最初の消えているコミットを取り出す)
$ git cherry-pick 8598194 (次の消えているコミットを取り出す)

lostbranch1_300.png

ブランチにしてしまう方法

 見えなくなっている理由は、コミットがどのブランチにも所属していないことが原因ですので、ブランチに所属させてしまえば普通にログから参照することができるようになります。この方法なら、たくさんの連続したコミットが見えなくなっていても、一度に復帰させることができます。

$ git checkout 8598194 (消えているコミットの末端へ移動する)
$ git branch MyBranch (ブランチを作る)

lostbranch2_300.png

以上。

81
60
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
60