はじめに
これは私が main / develop / feature
という 3 つ以上のブランチを使い開発していた時、
GitHub の Pull Request (以下 PR) で merge しようとしたところ conflict してしまい、GitHub の Web Editor で Conflict 解消をしてしまったが故の失敗を記す。
--
GitHub は非常に便利で conflict した PR の場合、Resolve Conflict ボタンが出現し、Web Editor を使用して解決することができ、実際私はこれを使って解決し、merge "してしまった"。
そう、この Web Editor を正しく理解せず使ってしまい、merge commit
をしてしまったのである。
どんなブランチ運用?
ブランチの意味
-
main
: 本番環境 -
develop
: 検証環境 -
feature
: 機能追加など細かい作業用
ブランチの切り方
機能を作るためにブランチを切る: main -> feature
検証環境に merge する: develop <- feature
本番環境に merge する: main <- feature
何がいけなかった?
develop <- feature
で PR を作成して Web Editor で conflict を解消すると、feature
に develop
の変更点が全て入ってきてしまうところが大分問題だった。(feature <- develop
を挟むことで conflict を解消するため)
これが起こると、develop
の内容がすべて feature
に入ってしまうので、main
に merge
しようとすると、develop
の内容がそのまままるっと入ってしまうのである。
これは大層な問題である。なぜなら開発中のデータなどが本番環境に入ることを意味しているからだ。(まぁ他にも問題あったりするけど一番はこれかと)
どうしたらいいんだ!
解決策は至って簡単。ローカル環境で merge
して push
してしまえばいいのである。
コマンドでもできると思うが今回は GitHub Desktop でのやり方を説明する。
以下ローカル環境での作業
develop <- feature
で conflict してしまった場合、
-
develop
ブランチに切り替える Branch タブ > Merge into current branch... (Ctrl+Shift+M)
- ブランチ一覧が表示されるので
merge
したいブランチを選択しCreate a merge commit
- conflict があれば任意のエディタを使用し conflict を解消する
- 解消されると
Continue merge
が押せるので押す -
Push
すればmerge
完了
とまぁこんな感じである。
※ 注意点として、merge
したものを push
すると、作成した PR が Merged
ステータスになり自動的に close
されるので、レビューをしなければならないなどがあれば、先にしてもらいましょう。
おわり
いろいろな運用方法があって、いろいろな解決方法とかがあると思うけど、
きちんと理解した上でその機能を使う、ちょっとでも疑問に思ったら納得いくまで聞く/調べる、が大事。特に本番環境とかあってミスれないとき!(当たり前)