GitHubコンフリクトとは
GitHubでコンフリクト(競合)が発生するのは、複数の開発者が同じファイルの同じ部分を異なる方法で変更した際に起こります。これは開発チームにとって日常的な課題ですが、適切な手順とツールを使用することで効率的に解決できます。
GitHub Web UI でのコンフリクト解決
1. プルリクエストでのコンフリクト確認
プルリクエストページで「This branch has conflicts that must be resolved」という警告が表示されたら、以下の手順で対処します:
1. プルリクエストページの「Resolve conflicts」ボタンをクリック
2. 競合ファイルが表示されるので、競合箇所を確認
3. コンフリクトマーカーを使って手動で編集
2. コンフリクトマーカーの理解
GitHubでは以下のマーカーでコンフリクト箇所が示されます:
<<<<<<< HEAD
現在のブランチの変更内容
=======
マージしようとするブランチの変更内容
>>>>>>> feature-branch-name
3. Web UI での解決手順
- 不要なマーカー(<<<<<<<、=======、>>>>>>>)を削除
- 残すべきコードを選択または両方を統合
- 「Mark as resolved」をクリック
- すべてのファイルを解決後、「Commit merge」を実行
Cursor(VSCode フォーク)でのコンフリクト解決
1. ローカル環境での事前準備
まず、最新の変更を取得してコンフリクトを確認します:
# リモートの最新情報を取得
git fetch origin
# メインブランチを最新に更新
git checkout main
git pull origin main
# 作業ブランチに戻る
git checkout feature-branch
# メインブランチをマージしてコンフリクトを確認
git merge main
2. Cursor の統合コンフリクト解決機能
Cursor には強力なコンフリクト解決機能が備わっています:
- 3-way merge view:左側に現在の変更、右側にインカミングの変更、中央に結果を表示
- AI アシスタント:Cursor の AI が最適な解決策を提案
- インラインアクション:「Accept Current」「Accept Incoming」「Accept Both」ボタン
3. Cursor での実践的解決手順
1. Cursor でプロジェクトを開く
2. Source Control パネルで競合ファイルを確認(!マークで表示)
3. 競合ファイルをクリックして 3-way merge view を開く
4. AI 提案を確認:Ctrl+K でAIアシスタントを呼び出し
5. 適切な解決策を選択または手動で編集
6. 解決完了後、ファイルを保存
4. AI を活用したコンフリクト解決
Cursor の AI アシスタントに以下のプロンプトを使用すると効果的です:
「このコンフリクトを解決してください。両方の変更の意図を保ちながら、コードの整合性を保ってください」
「このマージコンフリクトの最適な解決策を教えてください。機能の重複を避けて統合してください」
コンフリクト予防のベストプラクティス
1. 開発フローの改善
- 小さく頻繁なコミットを心がける
- 定期的に main ブランチからリベースする
- 機能ごとに独立したブランチを作成
- 同じファイルの同時編集を避ける調整
2. チーム内でのコミュニケーション
- 大きな変更前にチームに事前通知
- ファイル構造の変更は計画的に実施
- コードレビューで潜在的コンフリクトを特定
3. Git 設定の最適化
# より詳細なコンフリクト情報を表示
git config merge.conflictstyle diff3
# 自動リベースを設定
git config pull.rebase true
# 改行コードの自動変換を無効化(Windows)
git config core.autocrlf false
復旧とトラブルシューティング
コンフリクト解決を中断する場合
# マージを中断
git merge --abort
# リベースを中断
git rebase --abort
解決後の確認手順
# 解決したファイルをステージング
git add .
# マージをコミット
git commit -m "Resolve merge conflicts"
# プッシュしてプルリクエストを更新
git push origin feature-branch
まとめ
GitHubコンフリクトの解決は、適切なツールと手順を理解することで大幅に効率化できます。GitHub Web UI はシンプルなコンフリクトに、Cursor は複雑なコンフリクトや AI アシストが必要な場合に最適です。
重要なのは、コンフリクトを恐れず、チーム全体でベストプラクティスを共有することです。定期的な統合とコミュニケーションにより、コンフリクトの発生頻度を最小限に抑えることができます。