メインコンテンツまでスキップ

プルリクでマージできない

衝突(Conflict)が起こったときは

プルリクエストを作ろうと思ったら、衝突が起こった

そんなときは、プルリクエストのマージボタン周辺が以下のような表示になります。

プルリクでコンフリクト

Resolve conflict というボタンから、GitHubで直接、衝突の修正をする機能もあるのですが、いかんせん使いづらいので、弊社では、衝突はローカルリポジトリで解決してからプッシュする という運用ルールでやっています。

衝突が起こる原因

それは、プッシュしたブランチ(図の中のfix-html)より、マージ先のブランチ(develop)のほうが新しくなっていて、しかも編集箇所が被ってしまった場合に起こります。

プルリクでコンフリクト

「リベース」で派生元のブランチ、コミットを変更できる

Git Graphで、派生元を変えたいブランチをチェックアウトしてから、developの最新のコミットを右クリックして、メニューの中から「Rebase」を押します。

リベースは、つまるところマージと同じ処理です。マージと同じように、衝突の解決フローがはじまります。

プルリクでコンフリクト

リベースで、一直線の枝になりました

(枝分かれしているのは、リモートに残っているブランチです)

プルリクでコンフリクト

修正した内容をプッシュ

派生元を変更したブランチは、差分コミットで動く通常のプッシュは行えません。

ブランチのを強制上書きする「フォースプッシュ」を使用します。

プッシュのモードから、Forceを選択してください。

プルリクでコンフリクト

フォースプッシュ後の表示は、以下のようになります。

プルリクでコンフリクト