revertとは
git revert
は、任意のコミットを取り消すときに使えるコマンドです。例えば、新しい機能を導入した際に深刻なバグが発見されたときや、誤って間違ったブランチをマージしてしまったときに、そのコミットを取り消すことができます。
git revertの仕組み
git revert
コマンドは、指定したコミットによって導入された変更を打ち消すための新たなコミットを作成します。これにより、元のコミット自体は変更されず履歴に残り続けます。
具体的には、
$ git revert commitID
を実行すると、指定されたコミットIDによる変更を解析し、それを打ち消すための新しいコミットを作成します。この新しいコミットは、現在のブランチに自動的に反映されます。
revertの方法
GitHub上から
既にマージされたコミットは、該当するPRのページから、revertボタンをクリックすると実行されます。
通常のコミットは、Pull Request → commits → view commit details→revertボタンをクリックで実行されます。しかし、後者のrevertボタンは、全てのリポジトリで有効になっているわけではなく、適切なアクセス権が必要になるようです。
コマンドで
$ git revert commitID
で実行することができます。
commitIDの探し方
GitHub上から
GitHub上で、Pull Request → commits → view commit details
から確認することができます。
コマンドで
①$ git log
過去のコミットを遡ることができます。commit
の横に表示される40桁の16進数がcommitIDです。
ログはq
で閉じることができます。
こちらのコマンドは、1つのコミットにつき6行ほどにわたって情報が表示されるので、長い履歴を持つプロジェクトにおいては少し読みづらいです。そこで便利なのが、以下のコマンドです。
②$ git log --oneline
上記のコマンドでは、1つのコミットにつき、文字通りoneline、つまり1行で履歴を表示してくれます。このコマンドで表示されるcommit IDは、通常40桁で表示されるIDの先頭7~10桁を取り出す形で短縮されたものですが、こちらのIDもrevertコマンドで使うことができます。
注意点
①revertしたいコミットをマージした後に、別ブランチからの変更が加わっていると、ブラウザから手動でコンフリクトを解決する必要が生じます。
②gitには、revert以外にもgit reset
やgit checkout
など、変更を取り消すときに使えるコマンドが用意されています。必要に応じて、使い分ける必要がありそうです。(3つの違いは後日まとめてみます)