はんなりと、ゆるやかに

アジャイル、スクラムが好きが日々から学んだことをアウトプット

操作履歴を調べるGitコマンド:reflog を使うと間違った操作前に戻れます

push前のブランチを消してしまったり、間違ってresetしてコミット消えたり、したことありませんか。

そんな時に使えるコマンドがgit reflogです。git reflogはローカルブランチに対する操作履歴が見れます。その確認した操作履歴から間違う前の操作まで戻れます。使用頻度は少ないでしょうが、いざというとき役立つコマンドです。

git-scm.com

今回の検証に使った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 expiregit 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を実行して、戻したい位置を特定できると安心ですね。