Git の変更を取り消す | git revert
git revert コマンド
git revert は、コミット済みのスナップショットを取り消すためのコマンドである。ただし、プロジェクト履歴からそのコミットをなかったことにするのではない。そのコミットによって加えられた変更を打ち消す方法を見つけ、その結果を新しいコミットとして追加する。これは Git の履歴を保全し、履歴の完全性と共同作業の安全性を保つための方法である。
Git チュートリアル: git revert
使い方
git revert <commit>
<commit> で加えられたすべての変更を打ち消し、新しいコミットとして作成して、現在のブランチに適用するコマンドである。
補足説明
「revert」は、そのコミットをプロジェクト履歴から削除せずに変更を取り消したい場合に使う。これは、バグを追跡した結果、特定のコミットが原因だと判明した場合などに便利である。git revert を使えば、手作業で分析して修正し、その結果を新しいスナップショットとしてコミットする代わりに、その一連の作業を自動化できる。
打ち消しとリセット
git revert は 1 つのコミットだけを打ち消すコマンドであり、そのコミット以降に作成されたすべてのコミットを取り消して以前の状態に戻すコマンドではないことを理解しておこう。Git で後者を行うのは reset コマンドであり、revert ではない。
Git チュートリアル: 打ち消しとリセット
打ち消しには、リセットと比べて 2 つの重要な利点がある。第一に、プロジェクト履歴を書き換えないため、すでに公開リポジトリへ公開されたコミットに対しても安全に使える。公開済み履歴を変更する危険性については、git reset のページを参照してほしい。
第二に、git reset は現在のコミットを後ろへ戻す機能しか持たない。一方、git revert は履歴上の任意のコミットを個別に対象にできる。たとえば git reset で過去の 1 コミットだけを元に戻そうとすると、そのコミットと、それ以降に作られたすべてのコミットを削除し、後続のコミットを作り直す必要がある。明らかに、これは 1 つの変更を取り消す効率的な方法ではない。
使用例
git revert コマンドの簡単な使用例を示す。ここではスナップショットをコミットした直後に取り消している。
# Edit some tracked files
# Commit a snapshot
git commit -m "Make some changes that will be undone"
# Revert the commit we just created
git revert HEAD
これを図で表すと次のようになる。

ここで、4 番目のコミットは取り消し操作の後もプロジェクト履歴に残っている点に注意してほしい。git revert は変更を取り消すためにそのコミットを削除するのではなく、新しいコミットを追加する。その結果、3 番目と 5 番目のコミット後のリポジトリは完全に同じ状態になり、さらに 4 番目のコミットも履歴に残るため、後から確認できる。