Git

git revert safely undoes a specific commit by creating a new “undo” commit, so your history stays intact—even on shared branches (works for single, multiple, and even merge commits).

git revert

git revert は、既存のコミットを元に戻すために使用される Git コマンドです。具体的には、元に戻したいコミットを打ち消す新しいコミットを作成します。これにより、プロジェクトの履歴を保持したまま変更を取り消すことができます。

基本的な動作の流れ

対象コミットの選択
git revert <コミットハッシュ> の形式で、取り消したいコミットを指定します。
新しいコミットの作成
そのコミットを打ち消す新しいコミットが作成されます。これにより、過去の変更が元に戻りますが、履歴は保持されます。

まずはこれだけ(最短レシピ)

直前だけ戻す
git revert HEAD / メッセージ編集を省くなら git revert --no-edit HEAD
特定の1件
git log --oneline でハッシュ確認 → git revert a1b2c3d
直近N件をまとめて
git revert --no-edit HEAD~3..HEAD
一度に確認しながら
git revert --no-commit HEAD~3..HEAD → 直す → git commit

もう少し正確に(詳しい使い方)

複数コミットの取り消し

Git Bash

# 直近3件(HEAD~3 から HEAD まで)を一気に戻す(自動でコミット)
git revert --no-edit HEAD~3..HEAD

# 個別に確認したい(最後に自分で commit)
git revert --no-commit HEAD~3..HEAD
git commit

# 離れたコミットを複数まとめて
git revert --no-edit <hash1> <hash2> <hash3>

マージコミットの取り消し(親の指定が必要)

マージを打ち消すときは、どちら側を“主線(親)”とみなすかを -m で指定します。

Git Bash

# 親の並びを確認
git show <merge-hash>

# 親1を主線として取り消し
git revert -m 1 <merge-hash>

コンフリクトが出たとき

  1. 該当ファイルを手で直す
  2. git add <直したファイル>
  3. git revert --continue(やり直すなら git revert --abort

“取り消しの取り消し”で復活

過去に行った revert を、さらに revert すると、当時の変更を復活できます。

revert と reset / restore の違い(超要点)

revert
履歴を書き換える?
いいえ(新しい“打ち消し”コミットを作る)
公開ブランチで安全?
はい
主な用途
過去の変更だけを取り消す
reset --hard
履歴を書き換える?
はい
公開ブランチで安全?
いいえ
主な用途
履歴ごと巻き戻す(個人作業向け)
restore
履歴を書き換える?
いいえ
公開ブランチで安全?
はい
主な用途
作業ツリー/ステージの内容を戻す
cherry-pick
履歴を書き換える?
いいえ
公開ブランチで安全?
はい
主な用途
別ブランチのコミットを取り込む

よくあるつまずき(FAQ)

直近のミスだけ戻したい
git revert HEAD。メッセージ編集を省くなら --no-edit
3件前までまとめて戻したい
git revert --no-edit HEAD~3..HEAD。範囲の書き方がカギ。
マージの取り消しでエラーになる
-m で親番号を指定。git show <merge-hash> で確認。
コンフリクトして止まった
直して git addgit revert --continue。やり直しは --abort

コマンド例(コピペ用)

Git Bash

git revert HEAD
git revert --no-edit HEAD
git revert a1b2c3d
git revert --no-edit HEAD~3..HEAD
git revert --no-commit HEAD~3..HEAD
git commit
git revert --no-edit a1b2c3d e4f5g6h
git show <merge-hash>
git revert -m 1 <merge-hash>
git add <file>
git revert --continue
git revert --abort

Git Bash

git revert abc123

このコマンドは、ハッシュ値 abc123 のコミットを取り消すための新しいコミットを作成します。

注意点

git revert は、元に戻したい変更を取り消す新しい履歴を作るため、履歴が保持され、チームでの作業時にも安心して利用できる手法です。一方、コミット自体が消えるわけではなく、あくまでその影響を取り消す動作です。

履歴を消さずに戻すのが git revert の特徴です。