【git】git reflogでgitの履歴に対する過去の操作を管理する
git reflog
git reflog
は過去に更新したブランチの履歴などを参照ログとして閲覧できる機能です。
下の例では、あるリポジトリに対して淡々とコミットした履歴を一覧表示しています。
$ git reflog # commitやresetした履歴 80634e3 HEAD@{0}: reset: moving to HEAD~ d3f2ad5 HEAD@{0}: commit: add .gitignore 80634e3 HEAD@{1}: commit: modify CDNをローカルファイル参照に置き換え 6bfe118 HEAD@{2}: commit: move qiita.jsを src/js/service/util フォルダに移動 2e08059 HEAD@{3}: commit: move html/css/jsフォルダをsrcフォルダに移動 c9d4a29 HEAD@{4}: commit: modify js/qiita.js : qiitaServiceにgetItems()を追加 ...
git reflogの使い所
git reflog
で出現したHEAD@{1}
のようなシンボルは、リビジョンのハッシュ値のように使うことができる。
すなわち、git diff
で参照ログ間の差分を見ることができたり、git reset
で操作そのものの取り消しを行うことができます。
参照ログ間のgit diff
# 操作前後でのファイル差分 $ git diff HEAD@{1} HEAD@{2} diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 5509140..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.DS_Store
参照ログの取り消しgit reset
# 最初の履歴 $ git log commit 80634e31281831f83fe7cfb2c8b541718bb2ef0b Author: hoge <hogehoge@gmail.com> Date: Mon Mar 5 21:58:59 2018 +0900 modify CDNをローカルファイル参照に置き換え ... # 操作取り消し $ git reset HEAD@{1} d3f2ad5 HEAD@{0}: reset: moving to HEAD@{1} 80634e3 HEAD@{1}: reset: moving to HEAD~ d3f2ad5 HEAD@{2}: commit: add .gitignore 80634e3 HEAD@{3}: commit: modify CDNをローカルファイル参照に置き換え 6bfe118 HEAD@{4}: commit: move qiita.jsを src/js/service/util フォルダに移動 2e08059 HEAD@{5}: commit: move html/css/jsフォルダをsrcフォルダに移動 ... # 履歴がもとに戻る commit d3f2ad5e07097a2127c25502878d57a9e4ffed6d Author: hoge <hogehoge@gmail.com> Date: Mon Mar 5 23:47:47 2018 +0900 add .gitignore commit 80634e31281831f83fe7cfb2c8b541718bb2ef0b Author: hoge <hogehoge@gmail.com> Date: Mon Mar 5 21:58:59 2018 +0900 modify CDNをローカルファイル参照に置き換え
特に後者の操作に関しては、誤ったgit reset
操作の取り消しなどを修正するのに使えるのでとても便利です。