はじめに
PR をマージする際、向き先ブランチを間違えてしまったことはないでしょうか。
今回は、develop_test に入れるべき変更を誤って develop にマージしてしまったケースで、履歴を壊さずに安全に復旧した手順をまとめます。
同じ状況に遭遇した方の参考になれば幸いです。
発生した問題
- PR のマージ先が
developになっていることに気付かずマージ - 本来は
develop_testに入れるべき変更だった
やりたいこと
-
developにマージされてしまった変更をdevelop_testに移す -
developからはその変更を取り除く
対応方針
-
developは共有ブランチのため 履歴を変更しない -
そのため
-
develop_testへは cherry-pick -
developからは revert
を採用する
-
手順①:develop の変更を develop_test に移す
1. develop_test ブランチを最新にする
git checkout develop_test
git pull
2. develop にマージされたコミットのハッシュを確認
git log develop
例:
abc1234 修正内容
3. develop_test に cherry-pick
git cherry-pick abc1234
4. develop_test を push
git push origin develop_test
これで、本来入れたかった変更を develop_test に反映できました。
手順②:develop に入ってしまった変更を取り除く
1. develop ブランチを最新にする
git checkout develop
git pull
2. 該当コミットを revert
git revert abc1234
※ コンフリクトが発生した場合は解消後に commit
3. develop を push
git push origin develop
これで、develop から誤って入った変更を安全に取り除くことができました。
なぜ reset ではなく revert を使ったか
-
developはチームで共有しているブランチ -
reset --hardや force push は、他メンバーの作業履歴に影響する可能性がある
そのため、
履歴を残したまま取り消せる git revert を選択しました。
学び・再発防止
- PR マージ前に マージ先ブランチの確認は必須
- 特に複数の develop 系ブランチがある場合は要注意
- 「間違えても revert + cherry-pick で安全に戻せる」ことを知っておくと冷静に対応できる
まとめ
-
誤マージしても 慌てず・履歴を壊さず対応することが大切
-
共有ブランチでは
- 移動 →
cherry-pick - 取り消し →
revert
が安全
- 移動 →
同じミスをした方の助けになれば嬉しいです。