消したコミット・ブランチの救出
reset --hardで消したはずのコミットが実は必要だった、あるいはマージ済みと勘違いしてブランチを削除してしまった。履歴から救出したい。
手順
git reflogHEADの移動履歴を新しい順に一覧する。reset・checkout・commitの足跡が全部残っており、消えたコミットのハッシュがここで見つかることが多い。git log --oneline -5 HEAD@{2}怪しい時点(例: 2回前のHEAD位置)の履歴を中身で確認する。ハッシュだけで判断せず、コミットメッセージで「これだ」と裏を取る。git branch rescue/lost-work abc1234見つけたコミットに救出用ブランチを付けて命綱を確保する。ブランチが付けばもうGCに回収されない。git fsck --lost-foundreflogにも出てこない場合の最終手段。どこからも参照されていないコミット(dangling commit)を洗い出せる。git show 【danglingのハッシュ】候補のコミットの中身を1件ずつ確認する。日時と差分を見れば探している作業かどうか判別できる。git cherry-pick abc1234救出したコミットを現在のブランチに取り込む。ブランチ丸ごと戻したいなら手順3のブランチにcheckoutすればよい。⚠
注意reflogはローカル専用で、既定では期限切れエントリがやがて掃除される。「消した」と気づいたら、その場でgit gcなどの掃除系コマンドを実行せず、まず救出ブランチを付けること。