既存のコミットを取り消すためのコマンドです。この記事では、revert コマンドの詳細な使い方を探求し、この便利な機能を使用してプロジェクトの履歴を管理する方法について説明します。また、他のコマンドとの比較も行います。
revert コマンドとは
revert コマンドは、Git の既存のコミットを取り消すためのコマンドです。このコマンドは、コミットを取り消す新しいコミットを作成することによって、既存のコミットを取り消します。一般的に、「取り消したいコミットを打ち消すようなコミットを新しく作成する」という処理を行います。このため、既存のコミットの履歴は変更されません(コミットログには残ります)。この特性により、リモートリポジトリにプッシュされて公開されているコミットに対しても、安全に revert コマンドを使用できます。
revert コマンドの「既存のコミットを元に戻す」という点に関連して、同様の機能を持つ reset コマンドも存在します。しかし、reset コマンドは「コミットを取り消した」というコミットを作成せず、コミットを元に戻します。特にリモートにプッシュされ、公開されているコミットに対して reset コマンドを使用することは避けるべきです。注意が必要です。
また、revert コマンドは特定のコミットを元に戻すためのコマンドです。指定したコミット以降に行われた変更をすべて元に戻すわけではありません。
revert コマンドの基本的な使い方
特定のコミットを取り消すには、以下のコマンドを使用します。
$ git revert <commit>
上記のコマンドは、指定したコミットを取り消す新しいコミットを作成し、コードをそのコミットが存在しなかった状態に戻します。revert コマンドを実行すると、エディタが開き、コミットメッセージを編集できます。
コミットメッセージの編集
revert コマンドを使用する際に、コミットメッセージの編集を行うかどうかをオプションで指定できます。
コミットメッセージを編集する(オプションなし)
$ git revert <commit> -e
または
$ git revert <commit> --edit
コミットメッセージを編集しない(エディタを開かない)
$ git revert <commit> --no-edit
コミットしない
revert コマンドを使用すると、通常は新しいコミットまで行われますが、インデックスに戻すだけでコミットを行わないようにすることもできます。特に複数のコミットを revert する際に便利です。
$ git revert <commit> -n
または
$ git revert <commit> --no-commit
マージコミット
マージコミットを取り消す場合、マージした 2 つのコミット(親)のうち、どちらに戻すかを指定する必要があります。この際には-m オプションを使用し、戻したい親を数字(通常は 1 または 2)で指定します。以下はその例です。
$ git revert -m 1 <commit>
対象のマージコミットを確認するには、git show
コマンドやgit log
コマンドを使用し、親の数字(通常は 1 または 2)を確認します。これにより、どちらの親に戻すかを指定できます。
$ git show
commit xyz
Merge: 1a1a1a 2b2b2b # 注目
Author: xxxx xxxx
Date: Thu Jul 13 09:00:00 2017 +0000
Merge commit
上記の例では、「xyz」がマージコミットであり、「1a1a1a」と「2b2b2b」がマージされたコミットです。番号は、ログの「Merge:」行に書かれている順序に基づいて 1 または 2 が割り当てられます。
これで、Git の revert コマンドの詳細についての理解が深まったことでしょう。プロジェクトの履歴を管理する際に、revert コマンドを活用して変更を安全に取り消すことができます。