概要
このチートシートでは、Gitの取り消し操作を状況別にまとめます。
取り消し操作は、今の変更が「未コミット」「ステージ済み」「commit済み」「push済み」のどこにあるかで選びます。
最初に確認するコマンド
| 目的 | コマンド |
|---|---|
| 状態を見る | git status |
| 未ステージ差分を見る | git diff |
| ステージ済み差分を見る | git diff --staged |
| 履歴を見る | git log --oneline |
未コミット変更を戻す
| やりたいこと | コマンド |
|---|---|
| 特定ファイルの変更を捨てる | git restore file |
| 全ファイルの変更を捨てる | git restore . |
git restore README.md
この操作は未コミット変更を消します。必要な変更がないか先に git diff で確認します。
ステージから外す
| やりたいこと | コマンド |
|---|---|
| 特定ファイルをステージから外す | git restore --staged file |
| 全部ステージから外す | git restore --staged . |
git restore --staged README.md
これは変更自体を消さず、commit候補から外すだけです。
直前のcommitを直す
| やりたいこと | コマンド |
|---|---|
| メッセージを直す | git commit --amend -m "new message" |
| 変更を追加して直前commitに含める | git add file && git commit --amend |
push前の個人作業なら使いやすい操作です。push済みの場合は注意します。
commitを取り消す
| 状況 | コマンド |
|---|---|
| push前のcommitをやり直す | git reset --soft HEAD~1 |
| push済みcommitを打ち消す | git revert <commit> |
| 作業ごと消す | git reset --hard |
push済みのcommitを取り消すなら、まず git revert を検討します。
危険操作
| コマンド | 危険な理由 |
|---|---|
git reset --hard | 未コミット変更が消える |
git push --force | リモート履歴を書き換える |
git clean -fd | 未追跡ファイルを削除する |
これらは、実行前に本当に必要か確認します。
まとめ
Gitの取り消し操作は、変更がどこにあるかで選びます。未コミットなら restore、ステージから外すなら restore --staged、push済みcommitを打ち消すなら revert が基本です。危険な reset --hard や push --force は慎重に扱います。