「変更の取り消し・ロールバック」はGitを使う上で非常に重要な操作の一つです。以下に、Gitにおける代表的な「変更の取り消し・ロールバック」操作について詳しく説明します。
1. 作業ディレクトリの変更を取り消す(未ステージの変更)
git restore <ファイル名>
git restore <ファイル名>-
用途:作業ディレクトリでの変更を元に戻す(最新のコミット状態に戻す)。
-
例:
-
注意:ステージング前の変更に対して有効。ステージング済みの内容はこの方法では戻せません。
2. ステージング済みの変更を取り消す
git restore --staged <ファイル名>
git restore --staged <ファイル名>-
用途:
git addでステージングした変更を取り消し、作業ディレクトリに戻す。 -
例:
3. 直前のコミットを取り消す
git reset --soft HEAD~1
git reset --soft HEAD~1-
用途:直前のコミットを取り消し、変更はステージング状態に戻る。
-
例:
git reset --mixed HEAD~1
git reset --mixed HEAD~1-
用途:直前のコミットを取り消し、変更はステージングから外れて作業ディレクトリに残る。
-
例:
git reset --hard HEAD~1
git reset --hard HEAD~1-
用途:直前のコミットと変更内容そのものを完全に取り消す(復元不可能)。
-
例:
-
警告:
--hardは変更内容が完全に失われるため、十分に注意して使用してください。
4. 特定のファイルだけをロールバックする(ステージ・コミット問わず)
git checkout <コミットID> -- <ファイル名>(古い方法)
git checkout <コミットID> -- <ファイル名>(古い方法)
git restore --source <コミットID> <ファイル名>(推奨)
git restore --source <コミットID> <ファイル名>(推奨)-
用途:特定のファイルを過去のコミット状態に戻す。
-
例:
5. すでに共有したコミットを取り消す(履歴を書き換える)
git revert <コミットID>
git revert <コミットID>-
用途:既存のコミットを「打ち消す」ための新しいコミットを作成する。
-
例:
-
特徴:
-
安全に履歴を保ったままロールバックできる。
-
チームで共有済みのリモートリポジトリで作業する際に推奨される方法。
-
補足:どれを使えばよいかの判断基準
| 状況 | 推奨コマンド |
|---|---|
| ステージ前の変更を取り消したい | git restore <ファイル名> |
| ステージングを取り消したい | git restore --staged <ファイル名> |
| ローカルの直前コミットを取り消したい | git reset --soft/mixed/hard HEAD~1 |
| リモートにpush済みのコミットを取り消したい | git revert <コミットID> |
生成日:2025/06/09