LoginSignup
0
0

More than 3 years have passed since last update.

ブランチを過去の状態に戻したときの別ブランチの対応方法

Last updated at Posted at 2021-02-17

前提

下記の3ブランチがある
- master(本番リリース)
- dev(次リリースの機能をマージしていく環境)
- feature(現在devにPR中で、devとコンフリクトしたのでdevをマージした)

dev環境でテストで大丈夫だったものをmasterにマージする

状況

devの一分機能をリリース取りやめになり、masterの状態へ戻した

この場合、すでにPR出しているものは次リリースの機能が必要だったり、devへのPRでコンフリクトするのでdevをマージしていたため、masterの状態に戻ったdevへのPRには不要な機能の修正も含まれていた。

直し方

revertするのが簡単だが、今後対象の機能を修正したのを取り込むので、revertするとそれを無効化するコミットが作成されてしまう。

マージコミットを打ち消すと、打ち消されたブランチに含まれていた変更が、その後、そのブランチを再度マージしたとしても、取り込みが発生しない、という事になります。これは、revert により変更自体は打ち消されても、マージの事実が歴史上に残り続けるからです。

これは困るので、resetを使います

バックアップ作成

git branch bk_feature feature

マージコミット前に戻す

logを調べます

 git log --first-parent

commit 233233232323222222222
    10個目の機能追加

~中略~

commit 111111111111111111111
    2個目の機能追加

commit 123456789102345678910
    Merge branch 'dev' of https://github.com into feature

commit 098765432109876543210
    最初の機能追加

このとき、マージコミットから最新のコミットまでのハッシュをメモっておきます
メモったら、マージコミット前に戻ります

git reset --hard 098765432109876543210

あとはマージコミット後にした修正をcherry pickでもってきます

# git cherry-pick {始点となるコミットの1つ前のコミットハッシュ}..{終点となるコミットハッシュ}
git cherry-pick 123456789102345678910..233233232323222222222

cherry-pickする際の参考
https://www-creators.com/archives/2578
https://trueman-developer.blogspot.com/2018/05/git.html

おわったらforce pushする
githubはforce pushしたことが表示される
禁止などの条件がある場合はコピーのブランチでおなじことをして再度PR

git push -f origin feature
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0