取り消し

git revert

指定したコミットを打ち消す新しいコミットを作成します。共有ブランチの履歴を安全に取り消せる方法です。

構文 git revert <commit>...

オプション

フラグ 説明
--no-commit, -n 取り消し内容をコミットせずにステージングだけ行います。複数コミットをまとめて打ち消す場合に便利です。
--edit コミットメッセージを編集するエディタを開きます(デフォルトの動作)。
--mainline <parent-number> マージコミットを revert するときに、どちらの親を「メインライン」とするか番号で指定します(通常は 1)。

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 revertgit reset
履歴の変更しない(新しいコミットを追加)する(コミットを削除)
共有ブランチ安全(推奨)危険(使用禁止)
個人ブランチ使用可使用可
取り消しの取り消し容易(revert の revert)難しい

原則: origin/mainorigin/develop など、チームで共有しているブランチでの取り消しは必ず git revert を使いましょう。git reset で履歴を書き換えると、他のメンバーのリポジトリと齟齬が生じます。