Gitでファイルを変更したあと、「やっぱりこの変更を取り消したいなー」と思うことはよくあります。そんな時に便利なのがgit revertコマンドです。
この記事ではgit revertコマンドについて、以下の内容をわかりやすく解説します。
- git revertとは
- git revertの使い方
- git revertで特定のコミットを取り消す方法
git revertとは
git revertは、過去の特定のコミットを「取り消す」コマンドです。
「取り消す」といっても、元のコミット自体を削除するわけではなく、そのコミット内容の「反対の内容」を新しいコミットとして追加します。
そのため、取り消した変更内容は履歴に残り、いつどの変更が取り消されたかを追跡できるのが特徴です。
git revertの使い方
git revertの基本構文を以下に示します。
git revert <コミットID><コミットID>の部分には、取り消したいコミットのIDを指定します。これにより、指定したコミットの内容が「反対の内容」が新しいコミットに追加されます。
git revertで特定のコミットを取り消す方法
では実際にgit revertコマンドを用いて特定のコミットを取り消してみましょう。一例として、次のようなコミット履歴があるとします。
$ git log
commit 63bc2425083f4fb6635054a9526c474b433bfb4d (HEAD -> main)
Author: user01 <user01@example.com>
Date:   Thu Nov 7 15:14:16 2024 +0900
    Commit C
commit c355097b1a7b3b553b0732a6d8df995bf328c4a5
Author: user01 <user01@example.com>
Date:   Thu Nov 7 15:14:08 2024 +0900
    Commit B
commit 1317f3fd0e1eb14e4d6a7f77b814953480ab130e
Author: user01 <user01@example.com>
Date:   Thu Nov 7 15:13:55 2024 +0900
    Commit A今回は、git revertでcommit Bのコミットを取り消してみましょう。
手順を以下に示します。
特定のコミットを取り消す手順
- git revertコマンドを実行する
- コミットメッセージを変更する
では上記の手順について順番に説明します。
git revertコマンドを実行する
まず、Commit BのコミットID c355097b1a7b3b553b0732a6d8df995bf328c4a5 を指定して git revert コマンドを実行します。
git revert c355097b1a7b3b553b0732a6d8df995bf328c4a5コミットメッセージを変更する
git revertコマンドを実行すると、設定されているテキストエディタが開き、新しいコミットメッセージを確認または変更する画面が表示されます(デフォルトではvimが開きますが、設定によっては他のエディタが開くこともあります)。
Revert "Commit B"
This reverts commit c355097b1a7b3b553b0732a6d8df995bf328c4a5.
# 以下略- コミットメッセージを変更しない場合- :wqを入力した後、Enterキーを押してテキストエディタを閉じます。
 
- コミットメッセージを変更する場合- iキーを押してインサートモードに切り替えます。コミットメッセージを変更したら escキーでインサートモードを終了し、:wqを入力した後、Enterキーを押してテキストエディタを閉じます。
 
以上の手順でcommit Bのコミットを取り消すことができます。
【補足】git logコマンドでコミットが取り消されたかを確認する
最後に、 git logコマンドを実行してcommit Bのコミットが取り消されているかを確認してみましょう。
$ git log
commit 2192dc0e8e859f89f1b6ecc0fec4646dc95432ad (HEAD -> main)
Author: user01 <user01@example.com>
Date:   Thu Nov 7 15:14:32 2024 +0900
    Revert "Commit B"
    This reverts commit c355097b1a7b3b553b0732a6d8df995bf328c4a5.
commit 63bc2425083f4fb6635054a9526c474b433bfb4d
Author: user01 <user01@example.com>
Date:   Thu Nov 7 15:14:16 2024 +0900
    Commit C
commit c355097b1a7b3b553b0732a6d8df995bf328c4a5
Author: user01 <user01@example.com>
Date:   Thu Nov 7 15:14:08 2024 +0900
    Commit B
commit 1317f3fd0e1eb14e4d6a7f77b814953480ab130e
Author: user01 <user01@example.com>
Date:   Thu Nov 7 15:13:55 2024 +0900
    Commit A確認すると、commit Bのコミットを取り消すためのRevert "Commit B"という新しいコミットが作成されていることが分かります。実際にファイルを確認するとcommit Bで変更した内容が取り消されています。
補足
git revertコマンドはデフォルトでは、--edit(または-e)オプションが有効になっているため、コミットメッセージが編集可能になっています。そのため、以下のコマンドはすべて同じ動作をします。
git revert <commit>
git revert <commit> --edit
git revert <commit> -e--no-editオプションを追加すると、テキストエディタを開かずにデフォルトメッセージで取り消しコミットが作成されます。
git revert <commit> --no-edit本記事のまとめ
この記事ではgit revertコマンドについて、以下の内容を説明しました。
- git revertとは- 過去の特定のコミットを「取り消す」コマンド。
- 元のコミットを削除するのではなく、その反対の内容を新しいコミットとして追加する。
- 履歴に取り消しの記録が残るため、変更の追跡が可能。
 
- git revertの基本構文- git revert <コミットID>
- <コミットID>は取り消したいコミットのIDを指定する。
 
- git revertのオプション- デフォルトで--edit(または-e)オプションが有効になっているため、コミットメッセージが編集可能になっている。
- --no-editオプションを追加すると、テキストエディタを開かずにデフォルトメッセージで取り消しコミットが作成される。
 
- デフォルトで
お読み頂きありがとうございました。