git revert
指定したコミットを打ち消す新しいコミットを作成します。共有ブランチの履歴を安全に取り消せる方法です。
構文
git revert <commit>... git revert は、指定したコミットが行った変更を打ち消す新しいコミットを追加します。既存の履歴を書き換えないため、共有ブランチ(main など)の取り消しに最適な方法です。
基本的な使い方
# 直前のコミットを取り消す
git revert HEAD
# 特定のコミットを取り消す(ハッシュを指定)
git revert abc1234
# 直前2件のコミットを順番に取り消す
git revert HEAD~1..HEAD
複数コミットをまとめて打ち消す
# コミットせずにステージングだけ行い、後でまとめてコミット
git revert --no-commit HEAD~3..HEAD
git commit -m "過去3件のコミットを取り消す"
マージコミットを取り消す
# マージコミットを取り消す(1 は最初の親=マージ先ブランチ)
git revert -m 1 abc1234
コンフリクトが発生した場合
revert 中にコンフリクトが発生することがあります。
# コンフリクトを解消してから
git add <解消したファイル>
git revert --continue
# revert を中止する
git revert --abort
git revert vs git reset
共有ブランチかどうかで使い分けます。
| 観点 | git revert | git reset |
|---|---|---|
| 履歴の変更 | しない(新しいコミットを追加) | する(コミットを削除) |
| 共有ブランチ | 安全(推奨) | 危険(使用禁止) |
| 個人ブランチ | 使用可 | 使用可 |
| 取り消しの取り消し | 容易(revert の revert) | 難しい |
原則:
origin/mainやorigin/developなど、チームで共有しているブランチでの取り消しは必ずgit revertを使いましょう。git resetで履歴を書き換えると、他のメンバーのリポジトリと齟齬が生じます。