Gerritバージョン2.4.2を使用しています。私はmaster
というブランチを持っていて、newbranch
という新しいブランチを作成しました。次に、リモート(Gerritの)newbranch
にいくつかの変更をプッシュしました。 Gerritで確認した後、newbranch
への変更をマージしました。
いいえ、newbranch
をmaster
にマージし、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)
_
私は何をすべきか?
この状況はGerritのバグとして報告されています。 Gerrit's issue tracker の解決策/回避策を次に示します。
私の知る限りでは、現在2つのオプションがあります-
参照/ヘッドにプッシュを強制します。これは早送りにすぎないため、理論的にはすべてがすでにレビューおよび検証されています。もう一度行う意味はないので、そのプロセスをスキップして、refs/forではなくrefs/headsにプッシュするだけです。
さあ、マージコミットを作成してください。 'git merge --no-ff'を使用します-これは、早送りの状況では必要ありませんが、マージコミットを作成します。次に、マージコミットをアップロード、確認、検証、および通常どおりにマージできます。
私の会社はオプション2を採用する傾向があります。これをwontfixとして終了しますが、これをより効果的に行う方法について提案がある場合は、お知らせください。
マージが早送りマージである場合、早送りはブランチポインタを移動するだけなので、Push to gerritにオブジェクトは存在しません。
早送りを回避して、マージを強制してオブジェクトを作成する必要があります。
git merge --no-ff
次のコマンドは完全に機能します。
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