これやったらこういう reflog が出る!実例集
- 2025年05月14日
- CATEGORY- 1. 技術力{技術情報}167
Gitのreflogは、リポジトリ内で行われたすべての操作の履歴を記録する強力なツールです。しかし、具体的にどのような操作がどのようなreflog
エントリを生成するのかを理解するのは初心者にとって難しいかもしれません。この記事では、実際に行った操作に対するgit reflog
の出力例をいくつか紹介し、その見方と活用方法について詳しく解説します。
目次
- シンプルなコミット
- コミットの修正(amend)
- ソフトリセット(git reset –soft)
- ハードリセット(git reset –hard)
- ブランチの切り替え(checkout)
- マージコミット
- リベース(git rebase)
- チェリーピック(git cherry-pick)
- リセットの取り消し
- まとめ
- 参考資料
- 著者について
シンプルなコミット
まずは、基本的なコミット操作を行った場合のgit reflog
の出力を見てみましょう。
git add .
git commit -m "初期コミット"
git reflog
出力例:
abc1234 HEAD@{0}: commit: 初期コミット
def5678 HEAD@{1}: checkout: moving from master to feature
ここでは、最新のコミットがHEAD@{0}
として表示されています。このエントリは「初期コミット」を示しています。
コミットの修正(amend)
既存のコミットに変更を加えるために--amend
オプションを使用すると、以下のようなreflog
が記録されます。
git commit --amend -m "初期コミットを修正"
git reflog
出力例:
def5678 HEAD@{0}: commit (amend): 初期コミットを修正
abc1234 HEAD@{1}: commit: 初期コミット
ここでは、最新のHEAD@{0}
が修正されたコミットを示し、HEAD@{1}
には修正前のコミットが残っています。
ソフトリセット(git reset –soft)
git reset --soft
は、指定したコミットにHEADを移動させ、ステージングエリアに変更を残します。
git reset --soft HEAD~1
git reflog
出力例:
ghi9012 HEAD@{0}: reset: moving to HEAD~1
def5678 HEAD@{1}: commit (amend): 初期コミットを修正
abc1234 HEAD@{2}: commit: 初期コミット
HEAD@{0}
はリセット操作を示し、HEADが一つ前のコミットに移動したことがわかります。変更はステージングエリアに残っています。
ハードリセット(git reset –hard)
git reset --hard
は、指定したコミットにHEADを移動させ、作業ディレクトリとステージングエリアもその状態に戻します。
git reset --hard HEAD~1
git reflog
出力例:
jkl3456 HEAD@{0}: reset: moving to HEAD~1
ghi9012 HEAD@{1}: reset: moving to HEAD~1
def5678 HEAD@{2}: commit (amend): 初期コミットを修正
abc1234 HEAD@{3}: commit: 初期コミット
HEAD@{0}
とHEAD@{1}
は連続してリセット操作を示しています。作業ディレクトリとステージングエリアが完全に指定したコミットに戻っていることが確認できます。
ブランチの切り替え(checkout)
ブランチを切り替える際にもreflog
にエントリが記録されます。
git checkout feature
git reflog
出力例:
mno3456 HEAD@{0}: checkout: moving from master to feature
jkl3456 HEAD@{1}: reset: moving to HEAD~1
ghi9012 HEAD@{2}: reset: moving to HEAD~1
def5678 HEAD@{3}: commit (amend): 初期コミットを修正
abc1234 HEAD@{4}: commit: 初期コミット
最新のHEAD@{0}
はブランチの切り替えを示しています。
マージコミット
ブランチをマージする際にもreflog
にエントリが追加されます。
git checkout master # マージを受け入れる側へ
git merge feature # ここで初めてマージコミットが生まれる
出力例:
pqr6789 HEAD@{0}: merge feature: Merge made by the 'recursive' strategy.
mno3456 HEAD@{1}: checkout: moving from master to feature
jkl3456 HEAD@{2}: reset: moving to HEAD~1
ghi9012 HEAD@{3}: reset: moving to HEAD~1
def5678 HEAD@{4}: commit (amend): 初期コミットを修正
abc1234 HEAD@{5}: commit: 初期コミット
マージコミットが生成され、HEAD@{0}
にその情報が記録されています。
リベース(git rebase)
git rebase
は、コミット履歴を直線的に整理するためのコマンドです。リベースを行うと、新しいコミットが再適用され、reflog
にもその操作が記録されます。
git rebase main
git reflog
出力例:
stu9012 HEAD@{0}: rebase finished: returning to refs/heads/feature
vwx2345 HEAD@{1}: rebase: updating HEAD
pqr6789 HEAD@{2}: merge feature: Merge made by the 'recursive' strategy.
mno3456 HEAD@{3}: checkout: moving from master to feature
jkl3456 HEAD@{4}: reset: moving to HEAD~1
ghi9012 HEAD@{5}: reset: moving to HEAD~1
def5678 HEAD@{6}: commit (amend): 初期コミットを修正
abc1234 HEAD@{7}: commit: 初期コミット
リベース操作により、HEAD@{0}
にリベース完了のエントリが追加されています。
チェリーピック(git cherry-pick)
git cherry-pick
は、特定のコミットを別のブランチに適用するコマンドです。この操作もreflog
に記録されます。
git cherry-pick abc1234
git reflog
出力例:
yz12345 HEAD@{0}: cherry-pick: 初期コミット
stu9012 HEAD@{1}: rebase finished: returning to refs/heads/feature
vwx2345 HEAD@{2}: rebase: updating HEAD
pqr6789 HEAD@{3}: merge feature: Merge made by the 'recursive' strategy.
mno3456 HEAD@{4}: checkout: moving from master to feature
jkl3456 HEAD@{5}: reset: moving to HEAD~1
ghi9012 HEAD@{6}: reset: moving to HEAD~1
def5678 HEAD@{7}: commit (amend): 初期コミットを修正
abc1234 HEAD@{8}: commit: 初期コミット
チェリーピックによって、新しいコミットyz12345
が作成され、reflog
に記録されています。
リセットの取り消し
誤ってリセットを行った場合でも、git reflog
を使って元に戻すことが可能です。
git reflog
git reset --hard HEAD@{1}
出力例:
uvw6789 HEAD@{0}: reset: moving to HEAD@{1}
yz12345 HEAD@{1}: cherry-pick: 初期コミット
stu9012 HEAD@{2}: rebase finished: returning to refs/heads/feature
vwx2345 HEAD@{3}: rebase: updating HEAD
pqr6789 HEAD@{4}: merge feature: Merge made by the 'recursive' strategy.
mno3456 HEAD@{5}: checkout: moving from master to feature
jkl3456 HEAD@{6}: reset: moving to HEAD~1
ghi9012 HEAD@{7}: reset: moving to HEAD~1
def5678 HEAD@{8}: commit (amend): 初期コミットを修正
abc1234 HEAD@{9}: commit: 初期コミット
この例では、HEAD@{0}
でリセットを行った後、HEAD@{1}
に戻すことでリセット前の状態に復元しています。
まとめ
git reflog
は、Gitの操作履歴を詳細に記録しており、誤った操作を取り消す際に非常に役立ちます。特に、add
、commit
、reset
といった基本的なコマンドの操作がどのようにreflog
に反映されるかを理解することで、Gitの操作に対する自信が深まります。
実際のプロジェクトでこれらのreflog
の例を参考にしながら操作を行うことで、Gitの仕組みをより深く理解できるでしょう。継続的にreflog
を活用し、バージョン管理をより効果的に行ってください。
参考資料
- Git公式ドキュメント – git reflog
- Atlassian – Git Reflog Tutorial
- Backlog Gitチュートリアル – git reflog
- YouTube – Git Reflog Tutorial
- Udemy – Git Complete
- Reddit – Gitサブレディット
- Stack Overflow – Git Reflogタグ
- Git Tower – Reflog Guide
- 2025年05月14日
- CATEGORY- 1. 技術力{技術情報}167