git reset コマンドは、HEAD(現在の参照)を指定した状態に戻し、ステージングエリアや作業ツリーを取り消すためのコマンドです。
コミットのやり直しや、ステージした変更を外すときに利用されます。
構文(Syntax)
git reset [オプション] [コミットID/ブランチ]
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
(なし)/ --mixed | HEAD を指定コミットに移動し、ステージングを解除(作業ツリーは保持) | git reset HEAD~1 |
--soft | HEAD を指定コミットに移動し、ステージングは保持(コミットだけ取り消し) | git reset --soft HEAD~1 |
--hard | HEAD を指定コミットに移動し、ステージングと作業ツリーも完全に破棄 | git reset --hard HEAD~1 |
<ファイル> | 特定ファイルをステージから外す(HEAD は移動しない) | git reset app.py |
実行例
直前のコミットを取り消してステージ解除
git reset HEAD~1
(変更は残るがステージから外れる)
コミットだけを取り消して再編集
git reset --soft HEAD~1
(ステージされた状態で戻るので再コミット可能)
直前のコミットを完全に取り消す
git reset --hard HEAD~1
(作業ツリーも含めて完全に巻き戻す)
特定ファイルをステージから外す
git reset app.py
コミットIDを指定して戻す
git reset --hard abc1234
エラー例(存在しないコミットID)
git reset xyz9999
出力例:
fatal: ambiguous argument 'xyz9999': unknown revision or path not in the working tree.
関連コマンド
git revert: コミットを取り消すが、履歴を残す方法。git checkout/git switch: 特定のコミットやブランチに移動する。git restore: ファイル単位の復元専用コマンド(Git 2.23 以降推奨)。
備考
--soft→--mixed→--hardの順に「戻す範囲」が広くなる。- 公開済みの履歴に対して
git resetを使うと他人の履歴と食い違うため注意。 git reset --hardは作業を完全に失う可能性があるため、慎重に利用する必要があります。
参考
- Git公式ドキュメント: https://git-scm.com/docs/git-reset

コメント