背景
- 複数人で開発していると自分のプルリクがマージされる前に別の人のコードがマージされているケースがよくある
- 複雑なコンフリクトが起きていない場合gitが勝手にマージしてくれる
- gitがよしなにマージしてくれた時に内容を確認しないでミスったので注意点を記録しておく
サンプル
- masterブランチの内容が以下の状態でスタートする
REDME.md[master]
今日のスタメン
(二) 田中賢
(中) 森本
(右) 稲葉
(一) 高橋信
(指) スレッジ
(三) 小谷野
(左) 糸井
(捕) 鶴岡
(遊) 金子誠
- このmasterブランチをベースにdev1ブランチとdev2ブランチを作成する
- dev1ブランチで以下の内容に変更をしてmasterにマージした
REDME.md[dev1]
今日のスタメン
先発:ダルビッシュ
(二) 田中賢
(中) 森本
(右) 稲葉
(一) 高橋信
(指) スレッジ
(三) 小谷野
(左) 糸井
(捕) 鶴岡
(遊) 金子誠
- 特に問題は起きないのでmasterブランチの内容は以下に更新される
REDME.md[master]
今日のスタメン
先発:ダルビッシュ
(二) 田中賢
(中) 森本
(右) 稲葉
(一) 高橋信
(指) スレッジ
(三) 小谷野
(左) 糸井
(捕) 鶴岡
(遊) 金子誠
- dev2ブランチで以下の内容に変更する
REDME.md[dev2]
今日のスタメン
(二) 田中賢
(中) 森本
(右) 稲葉
(一) 高橋信
(指) スレッジ
(三) 小谷野
(左) 糸井
(捕) 鶴岡
(遊) 金子誠
(投) ダルビッシュ
- masterブランチはdev1がマージされているので、dev2ブランチを作った時から更新されている
- でもgitがオートマージしてくれるのでプルリクのマージボタンはそのまま押せる
- プルリクをマージするとmasterは以下の内容になる
REDME.md[master]
今日のスタメン
先発:ダルビッシュ
(二) 田中賢
(中) 森本
(右) 稲葉
(一) 高橋信
(指) スレッジ
(三) 小谷野
(左) 糸井
(捕) 鶴岡
(遊) 金子誠
(投) ダルビッシュ
- しかしこれはではダルビッシュと2回書いてしまっているので意図した結果ではない
- 自動でマージされたからといって内容を確認しないと意図しないコードのまま進んでしまう
- このケースだと見ればすぐわかるけど、もっと複雑なコードだとテストしないと気づけない
まとめ
- オートマージしてくれるの便利だけどたまにこういうこともあるから注意
- 複数人開発ってめんどくさい
- github flowに従えばこれは起きないのでそういう運用にしてもいいかも