概要
Git操作でやらかしてしまったとき、git reflogやgit resetが役に立った。
この記事では、ミスの内容や解決方法など、学んだことを記録する。
ミスの内容
筆者がやってしまったミスは以下の2つ。
- 自分の作業ブランチに、
git pullすべきでないブランチの変更を取り込んでしまった - 本来作業すべきブランチとは別のブランチで作業を行い、
git commitとgit pushを行なってしまった
解決方法
どちらのミスも、git reflogとgit resetで解決することができた。
git reflogで操作履歴を確認
まず、git reflogでブランチのHEADを確認した。
git reflog
# 出力例:
# コミットハッシュ値 HEAD@{0}: commit: コミットコメント
# コミットハッシュ値 HEAD@{1}: commit (merge): Merge branch 'develop' into ブランチ名B
# コミットハッシュ値 HEAD@{2}: checkout: moving from ブランチ名A to ブランチ名B
# コミットハッシュ値 HEAD@{3}: commit (merge): Merge branch 'develop' into ブランチ名A
git resetで戻したい状態に戻す
次に、git resetでブランチを元の状態に戻した。
上記の出力例において、ブランチAからブランチBへ移動した状態に戻したい場合(developブランチからブランチBへのmergeはまだしていない状態)、下記のコマンドを実行する。
git reset --hard HEAD@{2}
まとめ
-
git reflog:Git操作履歴を確認 -
git reset --hard HEAD@{%インデックス番号%}:ブランチを元の状態に戻す - ミス防止対策:作業内容と作業ブランチが一致しているかを確認