画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

プルリク画面でコンフリクトを発見した時のベストプラクティスについて考える。

githubを使っていて、プルリクエストのMergeボタンが灰色になってて、 あ、コンフリクトが起きそう! と思った時にどう対応するのが一番よいのか考える。

f:id:mapyo:20131126211813p:plain

前提条件

  • 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ってリンクをクリックすると出てくるやつと同じような事です。以下のような感じのやつ

f:id:mapyo:20131126211816p:plain

●作業内容

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