Bitbucketで発生するマージコンフリクトを解決する方法5選
📌 目次
🔍 マージコンフリクトとは?
マージコンフリクトとは、Gitで複数の開発者が同じファイルを編集した際に発生する競合のことです。Bitbucketを利用する際も、異なるブランチで編集したコードが衝突すると発生します。
⚠ マージコンフリクトが発生する原因
- 異なるブランチで同じ行を編集した場合
- 削除されたファイルを別のブランチで編集した場合
- 一方のブランチでファイルが移動され、他方で編集された場合
- 異なる開発者が同じファイルの異なる部分を編集し、それぞれプッシュした場合
- 変更履歴が複雑になり、リベースやマージが適切に適用されない場合
- リモートリポジトリの変更をローカルに取り込まずに、新しい変更をプッシュした場合
- バイナリファイル(画像、PDFなど)を同時に編集した場合
🛠 マージコンフリクトの解決方法5選
1. Gitの自動マージ機能を使う
単純なコンフリクトであれば、Gitが自動で解決することができます。マージを試みて、競合が発生しなければ、そのまま統合できます。
git merge main
自動マージ後は、必ずコードの変更点を確認し、意図しない修正が入っていないか確認しましょう。
2. 手動でコンフリクトを解決する
手動解決が必要な場合は、競合部分を編集し、どの変更を適用するか決めます。競合部分は以下のように表示されます。
<<<<<<< HEAD
ローカルの変更内容
=======
リモートの変更内容
>>>>>>> branch-name
競合部分を適切に修正した後、変更を確定します。
git add conflicted-file.txt
git commit -m "コンフリクト解決"
3. リベースを利用する
リベースを使用すると、最新の変更を適用しながらコンフリクトを解決できます。
git rebase main
リベース中にコンフリクトが発生した場合、修正を行い、以下のコマンドでリベースを継続します。
git rebase --continue
リベースを終了するには、すべてのコンフリクトを解決し、git rebase --continue
を実行してください。
4. 一方の変更を優先する
競合を回避するために、一方の変更を優先する方法もあります。リモートの変更を適用する場合:
git checkout --theirs conflicted-file.txt
ローカルの変更を優先する場合:
git checkout --ours conflicted-file.txt
その後、変更を確定します。
git add conflicted-file.txt
git commit -m "競合解決: 一方の変更を採用"
5. Bitbucketのプルリクエストでコンフリクトを解決
Bitbucketには、プルリクエストの「Resolve conflicts」機能を使用して、コンフリクトを解決するオプションがあります。
- Bitbucketのリポジトリページに移動
- プルリクエストの「Resolve conflicts」ボタンをクリック
- オンラインエディタを使用して競合を解決
- 変更を保存し、「Mark as resolved」をクリック
この方法は、BitbucketのUIを活用して簡単にコンフリクトを処理できるため、初心者にもおすすめです。
単純なコンフリクトであれば、Gitが自動でマージできます。
git merge main
2. 手動でコンフリクトを解決する
競合部分を手動で編集し、変更を確定させます。
git add conflicted-file.txt
git commit -m "コンフリクト解決"
3. リベースを利用する
リベースを使うと、履歴を整理しながらコンフリクトを解決できます。
git rebase main
4. 一方の変更を優先する
リモートの変更をそのまま適用する場合:
git checkout --theirs conflicted-file.txt
ローカルの変更を優先する場合:
git checkout --ours conflicted-file.txt
5. Bitbucketのプルリクエストでコンフリクトを解決
Bitbucketの「Resolve conflicts」機能を利用して、ブラウザ上でコンフリクトを解決できます。
✅ マージコンフリクトを防ぐためのベストプラクティス
- 頻繁に
git pull
して最新の状態を保つ - 明確なブランチ戦略を採用する(例: GitFlow)
- 小さな変更ごとにプルリクエストを作成し、早めにマージ
❓ Q&A
Q1. マージコンフリクトを回避する方法は?
A. チーム内でブランチの運用ルールを統一し、こまめにリモートの変更を取り込むことが重要です。
Q2. コンフリクトが発生した場合、どの方法を選べばいい?
A. 変更の内容によりますが、一般的には手動解決かリベースが推奨されます。