トラブルシューティング

git reset --hard で消した変更を復旧する

git reset --hard で消してしまった変更やコミットを元に戻す方法を解説

git reset --hard で消した変更を復旧する diagram

コミット済みの変更を復旧する(reflog)

reset --hard でコミットを消してしまっても、Git は直近の HEAD の移動履歴を reflog に記録しています。

ここからコミットハッシュを見つけて復元できます。

bash
# reflog でコミット履歴を確認
git reflog

# 出力例:
# abc1234 HEAD@{0}: reset: moving to HEAD~3
# def5678 HEAD@{1}: commit: 機能Aを実装

# 戻したいコミットのハッシュを指定して復元
git reset --hard def5678

リモートと同じ状態に戻す

ローカルの変更をすべて捨ててリモートリポジトリと同じ状態に戻したい場合、clone し直す必要はありません。

fetch でリモートの最新情報を取得し、対象のブランチに切り替えてから reset するだけで済みます。

bash
# リモートの最新を取得
git fetch origin

# main ブランチに切り替え
git switch main

# リモートの main ブランチと同じ状態にする
git reset --hard origin/main

未コミットの変更は復元できない

  • git add していない変更は完全に失われる

    reflog はコミットの履歴しか記録しません。git add もしていない作業ディレクトリの変更は、reset --hard で消えると復元する手段がありません。

  • git add 済み・未コミットの変更

    ステージングしていた変更は git fsck --lost-found で blob として見つかる場合がありますが、確実ではありません。やはり事前に git stash で退避するのが最善です。

関連コマンド