みなさんこんにちは! フリーランスプログラマーのsatoです。
緊急時に一部のコミットのみ削除する必要が発生することがあります。その際に使える命令が「git revert」です。今回はそんな緊急の方のために最初に、シンプルな使い方だけ説明してしまいますね!
git revert [打ち消したいコミットID]
これだけで、特定コミットの処理を、うち消すコミットを作成することが可能です。とはいえ「git revert」でできることはまだまだあります。
ぜひ深く学んでみましょう。
- [基本]git revert とは
- [基本]git revertの流れを図解!
- [基本]git revertの使い方
- [応用]git revertの使い方(応用編)
- [おまけ]打ち消しの逆!特定コミットを取り込むには
今回は、最初に初心者向けに「git revert」の仕組みを見ていきましょう。そのあと基本的な使い方と、応用的な話までみていきましょう。それではよろしくお願いいたします。
git revert とは
「git revert」とは、先ほども説明したように特定コミットの処理を、うち消すコミットを作成することができる命令です。たとえば不具合が起きて、緊急で外さなければならない処理が発生したとき。
とつぜん不要になってしまったコミットが発生したとき。そんな状況の時に有用です。緊急時に、瞬時に対応できるように、一通り使い方を覚えておくことをお勧めします!
git revertの流れを図解!
簡単に概念を説明しましたが、初心者にはわかりづらいと思います。そのためイメージを掴んでもらうために、使用する時の流れを図で見ていきましょう。まず画像のような開発状況だったとしましょう。
※○が各コミットです。またブランチAという、ブランチで作業していたこととします。
そんな状況で、特定のコミットが急遽不要になったとします。
そんな時に使えるのがrevertコマンドというわけです。
revertコマンドを使用すると、
- 特定のコミットの内容
- うち消す内容をもった新たなコミット
を作成できるわけです! なんとなくイメージできましたでしょうか? ここから先は実際、コマンドを自分で使ってみて実感していくのが良いとおもます。何事も実践あるのみですね!
git revertの使い方
概念的な説明はここまでです。具体的な使い方について見ていきましょう。とは言っても、冒頭で見たように、コマンド自体はシンプルに使うなら非常に簡単です。
git revert [打ち消したいコミットID]
※コミットIDは「git log」などで調べることができます。詳細がわからない人のために、またあとで説明しますね。
[補足]コミットIDの探し方
revertを使うには、該当コミットのコミットIDを探す必要があります。先ほども話が出ましたが、それには「git logコマンド」が有用です。
実行内容:
$ git log
実行結果例:
commit a6651cfa5d63caee134c7ea07061370ffd0fe3dc Merge: xxxxxxxxxxxxxxxxxx Author: xxxxxxxxxxxxxxxxxxxxxxxxxx Date: xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx
例えばこんな風に出てきた時「a6651cfa5d63caee134c7ea07061370ffd0fe3dc」部分がそのコミットIDになるわけですね!
git revertの使い方(応用編)
ではここから先は、少し応用的な使い方について見ていきましょう。
メッセージを編集するには
オプションをつけないrevertでは、「Revert + 元のコミットにつけたメッセージ」といったメッセージがついてしまいます。任意のメッセージをつけたいのなら「-e」オプションをつけましょう。
git revert -e [打ち消したいコミットID]
このオプションをつけることで、実行後にメッセージの編集が行えます。
コミットは作りたくない時
打ち消し実行時、コミットは作りたくない。そんな時活用できるのが「-n」オプションです。
git revert -n [打ち消したいコミットID]
これで、環境へ更新処理を取り込むことだけができます。もちろん、コミットはされないので注意しましょう。
マージコミットをうち消すには
マージコミットをrevertしようとすると、エラーが出てしまいます。そんな時は「-mオプション」をつけましょう。
git revert -m 1 [打ち消したいコミットID]
これはマージ元の、どちらの親へ戻すのかを指定するためにつける必要があります。「-m」の後ろについている数字へは「1」か「2」をつけることができます。マージコミットの場合「git log」をした際に表示される、ログの中に以下の表示が確認できるはずです。
Merge: xxxxxx yyyyyy
これは、マージ元の2つのコミットIDを表しています。1つめの親へ戻したい場合は「1」を、二つ目の親へ戻したい場合は「2」を選択しましょう。
打ち消しの逆!特定コミットを取り込むには
今回は特定のコミットをうち消す方法を学びました。実はgitには逆に特定のコミットのみ取り込む方法も存在します! ぜひ合わせて学んでおきましょう。この二つを使いこなせると、緊急時に特定コミットの追加・削除が行えるようになります。
それがどれだけ強力なことかは、実践でgitを使っている人なら理解できると思います。特定のコミットのみ取り込む方法である「cherry-pick」コマンドは以下のリンクで説明を行っています。
まとめ
今回は一通りrevertについて学びました。非常に有用なコマンドです。特に緊急時に、瞬時に問題の処理をうち消すことができるのが大きいですね。
今回初めて学んだ人は、いつでもとっさに使用できるように、練習をしておくことをお勧めします。応用的なことは置いておいても…
git revert [打ち消したいコミットID]
このシンプルなコマンドだけは、ぜひ覚えておいてください。