revertしたブランチを再マージしたいときの作法

この記事について

本記事は、2022年3月時点で社内向けに作成された技術資料をもとに、再編集した内容です。
記載されている技術情報や仕様、価格などは、当時の情報に基づいており、現在とは異なる場合があります。
ご利用の際は、最新の公式ドキュメントをご確認のうえ、参考情報としてご活用いただけますと幸いです。


目次

概要

featureブランチをmasterブランチにマージしたものの、不具合が発覚し、対象のコミットをrevertしました。

featureブランチを再修正して再度masterブランチへPRを投げたところ、想定していた変更履歴になりませんでした。 

結論

revertしたコミットは、revertで打ち消すべし!

(たまにしか使わない操作なので忘れがち。この記事は、備忘録も兼ねて書いています。) 

そもそもrevertとは?

「取り消したいコミットの内容を打ち消す、新しいコミットを作成する」コマンド。

元のコミットが削除されるわけではなく、履歴として残しつつ取り消す点がポイントです。

 

revertと似たコマンドにresetがありますが、こちらは「コミット内容そのものを元に戻す」操作になります。

リモートにpush済みのコミットはチーム内で履歴の不整合を防ぐためにも、履歴を残せるrevertを使うのが安全です。 

ダメパターン

  1. featureブランチ→masterブランチへPR&マージ
  2. 本番で不具合が見つかった等の理由から、masterブランチでrevertを実行
  3. featureブランチで不具合を修正
  4. 再度featureブランチからmasterブランチへPR
  5. 正しい変更履歴が表示されない

↓ 

revertによって打ち消された内容がmasterブランチに残っていたため、PR上では再修正分しか変更履歴として認識されず、想定していた差分が表示されないという状況になっています。

対応方法(理想)

  1. featureブランチからmasterブランチをpullする
  2. revertコミットをrevert(取り消しの取り消し)
  3. featureブランチを修正
  4. featureブランチからmasterブランチへPR

対応方法(別解1)

  1. featureブランチからmasterブランチへPR&マージ
  2. masterブランチでrevert(本番で不具合)
  3. featureブランチで再修正後、masterブランチをpullする
  4. revertコミットをrevert
  5. featureブランチからmasterブランチへPR
  6. 理想の変更履歴になった!!!

revertによって作成された打ち消しコミットをrevertすることで、「取り消しの取り消し」となり、元の内容が復活します。 

対応方法(別解2)

  1. masterブランチからtmpブランチを切り出す
  2. tmpブランチでrevertコミットをrevert
  3. tmpブランチをfeatureブランチへマージ
  4. featureブランチからmasterブランチへPR
  5. 理想の変更履歴になった!!! 

参考サイト

出典:Qiita – @bigplants(Daiki Hirakata) – GitHubでマージ済のプルリクをrevertした後に引き続きrevertされたブランチで作業を続行したい時
https://qiita.com/bigplants/items/3d1d3ada97d0c86d2548

役に立ったらシェアしていただけると嬉しいです
  • URLをコピーしました!
  • URLをコピーしました!
目次