push前のブランチを消してしまったり、間違ってresetしてコミット消えたり、したことありませんか。
そんな時に使えるコマンドがgit reflogです。git reflogはローカルブランチに対する操作履歴が見れます。その確認した操作履歴から間違う前の操作まで戻れます。使用頻度は少ないでしょうが、いざというとき役立つコマンドです。
今回の検証に使ったgit version は 2.27.0 です。
git reflog のオプション確認
git reflog [show]
reflogに記録されている操作履歴を確認するコマンドです。実行すると以下のように確認できます。
XXXXXX (HEAD -> testBranch) HEAD@{0}: checkout: moving from testBranch to testBranch
XXXXXX (HEAD -> testBranch) HEAD@{1}: commit: testBranch commit
XXXXXX (master) HEAD@{2}: checkout: moving from master to testBranch
XXXXXX (master) HEAD@{3}: commit: test commit
git reflog show
のままでは日付が出なくて分かりづらいと感じます。git log
と同じオプションが使えるので、git reflog show --date=local
で日付も合わせて表示すると分かりやすいです。
XXXXXX (HEAD -> testBranch) HEAD@{Tue Jun 23 20:28:29 2020}: checkout: moving from testBranch to testBranch
XXXXXX (HEAD -> testBranch) HEAD@{Tue Jun 23 20:28:25 2020}: commit: testBranch commit
XXXXXX (master) HEAD@{Tue Jun 23 20:28:03 2020}: checkout: moving from master to testBranch
XXXXXX (master) HEAD@{Tue Jun 23 20:27:08 2020}: commit: test commit
git reflog expire
、git reflog delete
古い履歴などを消すコマンドですが、通常使うことはないでしょう。git のリファレンスにも「これはエンドユーザーが直接使用することはありません。」と書かれています。
This is typically not used directly by end users
過去の操作に戻る
git reflog はあくまで操作履歴を確認するコマンドです。操作履歴から特定のポイントに戻りたい場合はgit reset、ブランチを作りたい場合はgit branchコマンド実行します。
git reset <ハッシュ値>
間違ってresetして変更点が消えた場合に便利です。操作ログから消したとき以前のハッシュ値を指定して戻しましょう。
git branch <ブランチ名> <ハッシュ値>
間違ってブランチを消した場合はgit branchで消す前のハッシュ値からブランチを作り直すと良いです。
まとめ
いざというときに使えるgit reflogを調べました。使う頻度は少ないですが、いざ失敗したときに慌てずgit reflogを実行して、戻したい位置を特定できると安心ですね。