【ツール活用|初心者向け】Gitの「タイムマシン」!git reflogを使って消えたコミットを救出する方法

1. 導入:なぜgit reflogが重要なのか

Gitを使っていると、「間違えてブランチを削除してしまった」「git reset –hardで作業を巻き戻したら、大事なコミットまで消えてしまった」という経験はありませんか?Gitの履歴は一度消えると終わりだと思われがちですが、実はGitには操作履歴をすべて記録している「保険」のような機能があります。それが今回紹介する git reflog です。これさえ知っていれば、ミスをしても慌てず、過去の状態へタイムスリップして復元することができます。

2. 基礎知識:git reflogとは何か

通常、git logは「コミットの履歴」を表示しますが、git reflog は「GitのHEAD(現在の場所)がどこを指していたか」という操作の履歴を表示します。
HEAD@{n}:n回前の操作時点を指すラベルです。
git reset –hard:指定したコミットへ強制的に戻すコマンドですが、これが原因で最新のコミットが見えなくなることがよくあります。
reflogを使えば、消えてしまったコミットの「ハッシュ値」を特定し、そこを起点にやり直すことが可能になります。

3. 実装/解決策:消えたコミットを復元する手順

もし誤ってコミットを消してしまったら、以下の手順で復元します。
1. git reflog を実行して、消える直前の状態を探す。
2. その時のハッシュ値(例: a1b2c3d)を確認する。
3. git reset –hard ハッシュ値 を実行して、その時点まで戻す。

4. サンプルプログラム:復元までの流れ

以下は、実際にターミナルで行う操作の流れを想定したサンプルです。

# 1. まず、操作履歴の一覧を表示して、戻りたいポイントを探します
git reflog

# 出力例:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~1 <-- ここで間違えて消してしまった!
# e4f5g6h HEAD@{1}: commit: 大事な機能を追加したコミット
# i7j8k9l HEAD@{2}: commit: 最初のコミット

# 2. 履歴から「e4f5g6h」が消えたコミットだと分かったので、そこへ戻ります
git reset –hard e4f5g6h

# 3. これでHEADが「e4f5g6h」の時点に戻り、消えたコミットが復活します
git log –oneline

5. 応用・注意点:現場で役立つアドバイス

・reflogの保持期間に注意
reflogは永久に保存されるわけではありません。デフォルトでは約90日間で古い履歴から削除されます(git gcによって整理されます)。そのため、ミスに気づいたらできるだけ早く復旧作業を行うのが鉄則です。

・他の人への影響
この操作は「自分のローカル環境」の履歴を書き換えるものです。もしすでにリモートサーバー(GitHubなど)にプッシュ済みのコミットを操作する場合は、チームメンバーに混乱を与えないよう、十分に注意して行ってください。

・まとめ
git reflog は、初心者が最も恐れる「やり直し」を可能にする強力なツールです。「何をやってもGitなら戻せる」という安心感を持つことで、新しい操作にも積極的にチャレンジできるようになりますよ!

コメント

タイトルとURLをコピーしました