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をオススメします。