web-dev-qa-db-ja.com

Bitbucket Serverでブランチ権限を使用する場合のマージの競合を伴うプルリクエストの解決

チームでBitbucket Serverの使用を開始しました。プルリクエストの使用を強制して、機能ブランチからメインの統合ブランチへのコミットを取得したいと考えています。これを実施するために、ブランチのプルリクエストなしでマージを防ぐブランチ権限機能をオンにしました。これは、競合するプルリクエストを取得するまで、うまく機能します。

この場合、指示では、ソースブランチのヘッドを手動でフェッチしてターゲットにマージし、これをプッシュするように指示しています。ただし、マージコミットはブランチの権限によって拒否されます!

ここに何か不足していますか、またはブランチ権限を使用しているときに手動でマージすることはできませんか?

7
3bh

残念ながら、この説明はパーミションの特定の組み合わせで少し行き詰まっており、それは私たちが望んでいるものです いつか修正 (私はBitbucketで作業しています)。

この問題を回避するには、ターゲットブランチからの変更をマージして、ソースブランチの競合を解決します。

2
Rog

BitBucketサーバーでは、プルリクエストのマージ中に競合が発生した場合、git bashツールを使用してローカルシステムでそれを解決し、変更をコミットしてリモート機能ブランチにプッシュして、メインブランチにマージできます。

ローカルシステムのgit bashツールでは、次の手順を順番に実行する必要があります。

(1)git bashツールを開いてチェックアウトするか、ローカル機能ブランチに切り替えます。

(2)最新の変更をメインブランチ(たとえば、「マスター」)からフィーチャーブランチにプルします。

git pull Origin master

(3)ローカルの変更により上記のコマンドが失敗した場合は、以下のコマンドを使用してそれらを隠し、そうでない場合は次のステップに進みます。

git stash

に続く -

git pull Origin master

(4)競合が発生した場合、自動マージは失敗するため、手動でマージする必要があります。競合を解決するには、以下のコマンドを使用してください。

git mergetool

デフォルトでは、使用可能なすべてのマージツールが表示され、そのうちの1つが自動的に選択されます。他のツールに非常に慣れていると感じた場合は、それを構成することもできます。競合解決のためにgitがそのツールを開きます。

(5)競合が解決されたら、変更を機能ブランチにコミットします。

git commit

(6)リモート機能ブランチに変更をプッシュします。

git Push

BitBucketサーバーで確認します。プルリクエストは自動的に更新されます。

もう一度マージしてみてください。競合がない場合は、正常にマージされます。

マージの競合が再び発生した場合(ローカルシステムで競合を解決しているときに誰かがメインブランチで新しい変更をコミットした場合)、上記の手順を再度実行して解決します。

上記の手順を順番に実行すると、競合を解決できるはずです。

よろしくお願いいたします。

10
Aavesh Yadav

ダーティ自動マージシナリオに入るとき、ブランチのアクセス許可によるか、自動マージの競合によるものか、feature/bugfixブランチを使用して、次のことを行います。

リポジトリのローカルクローン:

  1. 「git checkout [destination branch]」で宛先ブランチをチェックアウトします。
  2. 'git pull Origin [リモートの宛先ブランチ]'を使用して、リモートからの最新の変更でマスターブランチを更新します。
  3. 'git checkout -b feature/[my branch description]'で新しい機能ブランチをチェックアウトします
  4. 「git fetch Origin [ソースブランチ]」を使用して、ソースブランチから最新の変更を取得します。
  5. 取得した変更を「git merge FETCH_HEAD」を使用して宛先ブランチにマージします。ソースブランチをチェックアウトして最初に更新するのを避けるために、「git pull」の代わりに「git fetch」を使用しました。したがって、「git merge [ソースブランチ]」と「git merge FETCH_HEAD」(「git fetch Origin [ソースブランチ]」の後)の違いは、後者はリモートでそのブランチの状態をマージし、前者はそのブランチのローカル状態(同じではないか、存在しない場合もあります)。
  6. 次に競合を修正します。
  7. 変更されたファイルを「git add」または「git stage」でステージングします。
  8. 'git commit -m [your commit message]'を使用して、機能ブランチへの変更をコミットします。
  9. 'git Push Origin feature/[my branch description]'を使用して、変更をリモートにプッシュします。
  10. 応答メッセージで提供されたURLを使用して、Bitbucketで新しいプルリクエストを開始します。必ず正しい宛先ブランチを選択してください。自動マージは、可能な場合は続行できるようにする必要があります。
  11. 新しいプルリクエストを作成したので、元のプルリクエストを拒否します。不在時に他のコミットが元のPRに自動的に追加されていないことを確認します。

これはCLIにあります:

git checkout <destination branch>
git pull Origin <destination branch on remote>
git checkout -b feature/<my branch description>
git fetch Origin <source branch>
git merge FETCH_HEAD
<fix conflicts>
git stage <changed files>
git commit -m <my message>
git Push Origin feature/<my branch description>
<continue in bitbucket>
3
Dave Neeley