Git Reset --hard
最終更新
git reset --hard はブランチを対象のコミットへ移動し、ステージングエリアとワーキングツリーの両方をそれに完全に一致させます。その過程で、コミットされていないすべての変更が破棄されます。これは git reset の中で最も破壊的な形式なので、実行する前に現在の作業がもう不要であることを必ず確認してください。
誤ってコミットをリセットしてしまいましたか? hard reset は通常 git reflog で復元できます。ターミナルプレイグラウンドで安全に試してみましょう - ブラウザ内の本物のシェルです。
構文
| Command | What it does |
|---|---|
git reset --hard | コミットされていないすべての変更を破棄する (HEAD にとどまる) |
git reset --hard HEAD~1 | 直前のコミットとその変更を削除する |
git reset --hard <hash> | ブランチを特定のコミットへ強制的に戻す |
git reset --hard origin/main | ローカルブランチをリモートに完全に一致させる |
hard reset からの復元
リセットで破棄したコミット済みの作業は、通常まだ復元できます。
| Step | Command | Result |
|---|---|---|
| 1 | git reflog | HEAD がどこにあったかをハッシュ付きで一覧表示する |
| 2 | git reset --hard <hash> | リセット前のコミットに戻る |
git reset --hard に関するよくある質問
git reset --hard は実際に何をしますか?
現在のブランチを対象のコミットへ移動し、ステージングエリアとワーキングツリーの両方をそれに一致するよう上書きします。コミットされていない変更は、ステージングされているかどうかに関わらずすべて破棄されます。変更をステージングしたまま残す
--soft や、ステージング解除して残す --mixed と比べて、--hard は変更を捨ててしまう唯一のモードです。ローカルの変更をすべて破棄するにはどうすればよいですか?
コミットを指定せずに
git reset --hard を実行すると、ワーキングツリーが直前のコミットにリセットされ、コミットされていない編集が消去されます。reset が触れない未追跡ファイルもクリアするには、続けて git clean -fd を実行します。ブランチをリモートに一致させるようリセットするにはどうすればよいですか?
git fetch を実行してから git reset --hard origin/main を実行します (自分のブランチに置き換えてください)。これによりローカルブランチが強制的にリモートと完全に一致し、そこから分岐したローカルのコミットや変更が破棄されます。ローカルブランチがおかしくなり、リモートのバージョンだけがほしいときに便利です。git reset --hard を取り消せますか?
コミット済みの作業なら通常は可能です。
git reflog を実行してリセット前にブランチが指していたコミットを見つけ、git reset --hard <hash> でそこに戻ります。一度もコミットされていない変更 (ワーキングツリーにのみあるもの) は復元できないので、--hard は慎重に扱ってください。これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで
git reset --hard を実行できます - インストールするものはありません。Coddy の無料のインタラクティブな Git コースでも、リセットや変更の取り消しをステップごとに扱っています。