Git Revert: 公開済みコミットを安全に取り消す
git revert を使って以前のコミットの変更を打ち消す新しいコミットを作成する方法を解説。共有ブランチで作業を安全に取り消すための正しい方法です。
git revert <commit-hash>詳細な説明
git revert は何をするのか?
git revert は指定されたコミットの正確な逆操作となる新しいコミットを作成します。履歴を書き換える git reset とは異なり、revert は履歴に追加します。そのため、他の開発者が既に変更を pull している共有ブランチでも安全に使用できます。
基本的な使い方
# 単一のコミットを revert する
git revert a1b2c3d
# 自動コミットせずに revert する(変更のみステージ)
git revert --no-commit a1b2c3d
複数のコミットを revert する
# 範囲を指定して revert(古い方から新しい方へ)
git revert a1b2c3d..f4e5d6a
# 個別のコミットを複数 revert
git revert --no-commit a1b2c3d
git revert --no-commit f4e5d6a
git commit -m "Revert payment and user changes"
マージコミットを revert する
マージコミットには2つの親があります。-m でどちらの親に戻すかを指定する必要があります:
# -m 1 は最初の親(通常、merge 先のブランチ)を保持することを意味する
git revert -m 1 <merge-commit-hash>
Revert と Reset の比較
git revert |
git reset |
|
|---|---|---|
| 履歴を変更する | しない(新しいコミットを追加) | する(コミットを削除) |
| 共有ブランチでの安全性 | 安全 | 危険 |
| 新しいコミットを作成する | はい | いいえ |
Revert を使うべきとき
mainや共有ブランチのコミットを取り消すとき — revert が唯一安全な方法です。- デプロイのロールバック — revert して push すればクリーンなロールバックが実行されます。
- 監査証跡の保持 — revert コミットは変更が意図的に取り消されたことを記録します。
git reset はローカルの未 push コミットにのみ使いましょう。それ以外のすべてのケースでは git revert が責任ある選択です。
ユースケース
本番環境にデプロイされたコミットが重大なバグを引き起こした場合に、チームが git revert を使って共有履歴を書き換えずに変更を取り消し、修正を push する場面で使用します。