githubを使っていて、プルリクエストのMergeボタンが灰色になってて、
あ、コンフリクトが起きそう!
と思った時にどう対応するのが一番よいのか考える。
前提条件
- github flowを使っている
- hogehogeブランチ→masterに対してpull requestを送っている。
- 自分がhogehogeブランチで作業していて、最新の状態がローカルにある。
案
僕がいいと思った順に書いていきます。
案1.灰色になっていたのを確認した瞬間にgit rebase masterして解消する
- 前提
- 自分一人しかそのbranchで作業していない
- ある程度rebaseがどういうものなのかわかっている。
- 作業内容
git fetch origin
git checkout master
git pull origin master
git checkout hogehoge
git rebase master
(コンフリクトが起きるので修正)
git add test.txt
git rebase --continue
git push -f origin hogehoge
- メリット
- 履歴が綺麗になる。
- プルリクエストの画面からmergeボタンを押してmergeが出来る(つまり、他の人にレビューしてもらえるって事)
- デメリット
- 前提に書いてるのでないと思うけど、
push -f
使ってるので、誰かがhogehogeブランチからブランチを切ってたり、hogehogeブランチに対してプルリクエストを出していると悲惨な事になる。
※と思ったけど、他の人が作業してても、
git pull --rebase
他の人はこれで変更分を落とせば大丈夫かも。。
案2.灰色になっていたのを確認した瞬間にgit merge masterする
- 前提
- 自分以外の誰かがhogehogeブランチで作業している
- rebaseに対して恐怖感を抱いている。
- 作業内容
git fetch origin
git checkout master
git pull origin master
git checkout hogehoge
git merge master
(コンフリクトが起きるので修正)
git push origin hogehoge
- メリット
- 他の人が作業してても安心
- 他の人にレビューもしてもらえる。
- デメリット
- 履歴がちょっと汚くなる。
案3.リリース直前になってコマンドラインから、masterに直接pushする
- 前提
- 僕の中ではこれはやりたくない。
- プルリクエストの画面からmergeボタンが押せない場合、
Use the command line
ってリンクをクリックすると出てくるやつと同じような事です。 - 作業内容
git fetch origin
git checkout master
git pull origin master
git checkout hogehoge
git merge master
(ここでコンフリクトが起きるので解消)
git add test.txt
git commit
git checkout master
git push origin master
- メリット
- あまりメリットを感じない
- デメリット
- リリース直前になって慌てて作業するのでちょっと。。。
- プルリクエスト使ってないので、他の人がレビューしにくい。
思った事
案3は選択肢としてないなと思いつつも、もしかするとあるかもしれないと思って上げてみました。
前にコンフリクトが起きて、解消してるはずなんだけどMergeボタンが押せなかった現象が起きた事があったので、頭に入れとくといいかもしれません。(別のプルリクを作るという形でもいい気がしてきました)
僕は事前に解消して、リリース前にあたふたしたくないので、案1か案2をオススメします。