web-dev-qa-db-ja.com

Gerritブランチを別のGerritブランチにマージする方法

Gerritバージョン2.4.2を使用しています。私はmasterというブランチを持っていて、newbranchという新しいブランチを作成しました。次に、リモート(Gerritの)newbranchにいくつかの変更をプッシュしました。 Gerritで確認した後、newbranchへの変更をマージしました。

いいえ、newbranchmasterにマージし、masterの更新を送信(newbranchからの変更とマージ)し、newbranchブランチを削除します。

私はこれをやってみました:

_git fetch
git checkout master
git merge newbranch
git Push Origin master:refs/for/master
_

しかし、Gerritはこのメッセージを返します:

_ ! [remote rejected] master -> refs/for/master (no new changes)
_

私は何をすべきか?

37
Alan Shen

この状況はGerritのバグとして報告されています。 Gerrit's issue tracker の解決策/回避策を次に示します。

私の知る限りでは、現在2つのオプションがあります-

  1. 参照/ヘッドにプッシュを強制します。これは早送りにすぎないため、理論的にはすべてがすでにレビューおよび検証されています。もう一度行う意味はないので、そのプロセスをスキップして、refs/forではなくrefs/headsにプッシュするだけです。

  2. さあ、マージコミットを作成してください。 'git merge --no-ff'を使用します-これは、早送りの状況では必要ありませんが、マージコミットを作成します。次に、マージコミットをアップロード、確認、検証、および通常どおりにマージできます。

私の会社はオプション2を採用する傾向があります。これをwontfixとして終了しますが、これをより効果的に行う方法について提案がある場合は、お知らせください。

34
Michael Sims

マージが早送りマージである場合、早送りはブランチポインタを移動するだけなので、Push to gerritにオブジェクトは存在しません。

早送りを回避して、マージを強制してオブジェクトを作成する必要があります。

git merge --no-ff
10
Sogger

次のコマンドは完全に機能します。

git checkout master
git merge --no-ff newbranch

デフォルトのコミットメッセージで保存できます。変更IDが生成されていることを確認してください。次のコマンドを使用して確認できます。

git commit --amend

次に、次のコマンドでプッシュします。

git Push Origin HEAD:refs/for/refs/heads/master

以下のようなエラーメッセージが表示される場合があります。

! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)

これを解決するには、gerritプロジェクト管理者は、「refs/for/refs/heads/master」または「refs/for/refs/heads/*」という名前の別の参照をgerritに作成する必要があります(将来、すべてのブランチをカバーする予定です)。次に、この参照に対する「プッシュマージコミット」権限と、GCRを送信する必要がある場合は「送信」権限を付与します。

さて、上記のPushコマンドをもう一度試してみてください。うまくいくはずです。

クレジット:

https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit

https://stackoverflow.com/a/21199818/3877642

2