git revertの使い方!コミットを取り消す方法について解説!

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 revertcommit 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オプションを追加すると、テキストエディタを開かずにデフォルトメッセージで取り消しコミットが作成される。

お読み頂きありがとうございました。