マージの競合を解決する
プルリクエストとコード レビュー
このページの内容
関連コンテンツ
- Enable an issue tracker
- Create an issue
- Use the issue tracker
- Set email preferences for an issue tracker
- Create an issue in Bitbucket Cloud
- Set up the Issues service
- Resolve issues automatically when users push code
- Issue tracker images not loading
- Make the tracker private or public
- Enable automatic merging fails with HTTP Status 400
robots | noindex |
プル リクエストを作成すると、Bitbucket は更新されたソースと対象の元のコードとの比較を自動的に行います。対象のコードにほかのユーザーも変更を行っていた場合、マージを試行した際に、競合がある旨の通知が表示されます。
When you have merge conflicts, you can't click the Merge button from the pull request to merge. To resolve these conflicts, you pull the changes to your local repository and fix them there.
Git ブランチの競合を解消する
以降の説明は、Git リポジトリの 2 つのブランチ間の競合に対応する手順です。次のプレースホルダーが使用されます。
- フォークされたリポジトリのディレクトリ:
<repo_directory>
- 宛先ブランチ:
<destination_branch>
- ソース ブランチ:
<feature_branch>
- 解決済みの競合があるファイル:
<filename>
リポジトリのディレクトリに移動します。
$ cd ~/<repo_directory>
たとえば、リポジトリ名が
my-repository
の場合、結果は次のようになります。computer:$ cd ~/my-repository computer:my-repository emmap$
リポジトリの最新のバージョンを Bitbucket からプルします。
$ git pull
ソース ブランチをチェックアウトします。
$ git checkout <feature_branch>
宛先ブランチをソース ブランチにプルします。この時点では、宛先ブランチをプルすると、それをソースとマージできるかの試行が行われ、すべての競合が検出されます。
$ git pull origin <destination_branch>
たとえば、宛先ブランチが "
master
" の場合、結果は次のようになります。computer:my-repository emmap$ git pull origin master * branch master -> FETCH_HEAD Auto-merging team_contact_info.txt CONFLICT (content): Merge conflict in team_contact_info.txt Automatic merge failed; fix conflicts and then commit the result.
競合がある 2 つのブランチをローカルでマージすると、エディターでファイルを開いたときに競合のマーカーが表示されます。
ファイルを開いて競合を解消します。これを行うには、コマンド ラインを使用するか、ファイルに移動します。
ファイルは次のようになります。
A. HEAD ブランチの変更の開始点。この例では、HEAD はマージ先のアクティブなブランチを表します。
B. アクティブなブランチの変更の終了点かつ、非アクティブなブランチの変更の開始点。
C. 非アクティブなブランチの変更の終了点。- 次の操作を行って競合を解消します。
- Git が追加した変更記号を削除します (上述のスクリーンショットのA、B、および C)。
- 内容を修正します。
- ファイルを保存します。
結果は次のようになります。
変更を追加、コミットします。
$ git add <filename> $ git commit -m'commit message'
変更をリモートにプッシュします。
git push origin <feature_branch>
プル リクエストを確認すると、プル リクエストは引き続きオープンで、マージの競合は表示されなくなっていることがわかります。
Git フォークの競合を解消する
次の手順では、フォークされたリポジトリと元の Git リポジトリとの間の競合を解決する手順について説明します。次のプレースホルダーが使用されます。
- フォークされたリポジトリのディレクトリ:
<repo_directory>
- 元のリポジトリの URL:
<original_repo_URL>
- 解決済みの競合があるファイル:
<filename>
- フォークされたリポジトリの宛先ブランチ:
<destination_branch>
ここでは、フォークされたリポジトリの競合を、元のリポジトリから更新をプルすることで解決する手順について説明します。フォークされたリポジトリを元のリポジトリにプルして元のリポジトリで競合を解決し、プッシュ時にプル リクエストが自動的にマージされるようにすることもできます。
フォークされたリポジトリのディレクトリに移動します。
$ cd ~/<repo_directory>
たとえば、リポジトリ名が "
my-repository
" の場合、結果は次のようになります。computer:$ cd ~/my-repository computer:my-repository$
フォークされたリポジトリでほかのユーザーが作業していた場合、Bitbucket からリポジトリの最新バージョンを取得していることを確認します。
$ git pull
フォークされたリポジトリとマージするために、宛先リポジトリをローカル リポジトリにプルします。
- リポジトリで URL をコピーします。
コマンド ラインで、
git pull
とリポジトリ URL を入力します。$ git pull <original_repo_URL>
結果は次のようになります。
computer:my-repository emmap$ git pull git@bitbucket.org:user/myteamquotes.git remote: Counting objects: 219, done. remote: Compressing objects: 100% (219/219), done. remote: Total 219 (delta 137), reused 0 (delta 0) Receiving objects: 100% (219/219), 565.11 KiB | 382.00 KiB/s, done. Resolving deltas: 100% (137/137), completed with 2 local objects. From bitbucket.org:tutorials/tutorials.git.bitbucket.org * branch HEAD -> FETCH_HEAD Auto-merging editme.html CONFLICT (content): Merge conflict in editme.html Automatic merge failed; fix conflicts and then commit the result.
ファイルを開いて競合を解決します。これを行うには、コマンド ラインを使用するか、ファイルに移動します。
ファイルは次のようになります。
A. HEAD ブランチの変更の開始点。この例では、HEAD はマージ先のアクティブなブランチを表します。
B. アクティブなブランチの変更の終了点かつ、非アクティブなブランチの変更の開始点。
C. 非アクティブなブランチの変更の終了点。- 次の操作を行って競合を解消します。
- Git が追加した変更記号を削除します (上述のスクリーンショットのA、B、および C)。
- 内容を修正します。
- ファイルを保存します。
結果は次のようになります。
変更を追加、コミットします。
$ git add <filename> $ git commit -m'commit message'
変更を宛先リポジトリにプッシュします。
$ git push origin <destination_branch>
プル リクエストを確認すると、プル リクエストは引き続きオープンで、マージの競合は表示されなくなっていることがわかります。
Mercurial ブランチ間の競合を解決する
次の手順では、Sourcetree を使用して 2 つのブランチ間で競合を解決する方法について説明します。Mercurial リポジトリの競合を解決するには、マージ用のツールをインストールして使用する必要があります。Sourcetree をインストールしていない場合、インストールします。
Sourceree でリポジトリを開きます。
リポジトリで、ソース ブランチにいることを確認します。[ブランチ] に、チェックアウトしたブランチが太字で表示されます。ソース ブランチがチェックアウトされていない場合、そのブランチ名をダブルクリックします。
[プル] ボタンをクリックして、Bitbucket からリポジトリの最新バージョンをプルします。[開く] ダイアログでは既定設定のまま [OK] をクリックします。
- 競合を含む 2 つのブランチをマージします。
- ソース ブランチで最新のコミットをクリックします。
- マージ ボタンをクリックします。
- 宛先ブランチで最新のコミットをクリックします。
- ダイアログで [OK] をクリックします。
ソースをプルすると、宛先リポジトリとのマージの試行が行われ、すべての競合が検出されるため、[マージの解消] ダイアログが表示されます。OK をクリックします。
ファイルを任意のエディタで開いて競合を解決します。
ファイルは次のようになります。
A. アクティブなブランチの変更の開始点。
B. アクティブなブランチの変更の終了点かつ、非アクティブなブランチの変更の開始点。
C. 非アクティブなブランチの変更の終了点。- 次の操作を行って競合を解消します。
- Git が追加した変更記号を削除します (上述のスクリーンショットのA、B、および C)。
- 内容を修正します。
- ファイルを保存します。
結果は次のようになります。
- Sourcetree に戻り、競合があるファイルを選択します。[アクション] で [競合の解決] を選択し、[解決済みとしてマーク] を選択します。ダイアログで [OK] をクリックします。
- [コミット] ボタンをクリックし、コミット メッセージを入力して、[コミット] をクリックします。
- [プッシュ] ボタンをクリックし、選択した内容を確認して [OK] をクリックします。
プル リクエストを確認すると、プル リクエストは引き続きオープンで、マージの競合は表示されなくなっていることがわかります。
Mercurial フォークで競合を解決する
次の手順では、Sourcetree を使用して、フォークされたリポジトリと元のリポジトリの間の競合を解決する方法について説明します。Mercurial リポジトリの競合を解決するには、マージ用のツールをインストールして使用する必要があります。Sourcetree をインストールしていない場合、インストールします。
ここでは、フォークされたリポジトリの競合を、元のリポジトリから更新をプルすることで解決する手順について説明します。フォークされたリポジトリを元のリポジトリにプルして元のリポジトリで競合を解決し、プッシュ時にプル リクエストが自動的にマージされるようにすることもできます。
Sourcetree で、フォークされたリポジトリを開きます。
フォークされたリポジトリで [プル] ボタンをクリックして、Bitbucket から宛先ブランチの最新バージョンを取得します。[開く] ダイアログでは既定オプションのまま [OK] をクリックします。
- 元のリポジトリの最新バージョンをプルするには、[プル] ボタンを再度クリックします。開いているダイアログで次の操作を行います。
- [このリポジトリをプル] で [カスタム] を選択し、元のリポジトリの URL を入力します。
- OK をクリックします。
ソースをプルすると、宛先リポジトリとのマージの試行が行われ、すべての競合が検出されるため、[マージの解消] ダイアログが表示されます。OK をクリックします。
ファイルを任意のエディタで開いて競合を解消します。
ファイルは次のようになります。
A. アクティブなブランチの変更の開始点。
B. アクティブなブランチの変更の終了点かつ、非アクティブなブランチの変更の開始点。
C. 非アクティブなブランチの変更の終了点。- 次の操作を行って競合を解消します。
- Git が追加した変更記号を削除します (上述のスクリーンショットのA、B、および C)。
- 内容を修正します。
- ファイルを保存します。
結果は次のようになります。
- Sourcetree に戻り、[履歴] から [未コミットの変更] 行を選択します。
- [アクション] で [競合の解消] を選択し、[解決済みとしてマーク] を選択します。ダイアログで [OK] をクリックします。
- [コミット] ボタンをクリックし、コミット メッセージを入力して、[コミット] をクリックします。
- [プッシュ] ボタンをクリックし、選択した内容を確認して [OK] をクリックします。
プル リクエストを確認すると、プル リクエストは引き続きオープンで、マージの競合は表示されなくなっていることがわかります。
関連コンテンツ
- Enable an issue tracker
- Create an issue
- Use the issue tracker
- Set email preferences for an issue tracker
- Create an issue in Bitbucket Cloud
- Set up the Issues service
- Resolve issues automatically when users push code
- Issue tracker images not loading
- Make the tracker private or public
- Enable automatic merging fails with HTTP Status 400