Gerritシステムは、私たち数人だけが使用しています。変更Aがあり、そのステータスが「送信済み、マージ保留中」である場合。 「開いている」Webページの変更リスト。また、この変更が別の変更B(ステータスが破棄されている)に依存していることに気付きました。
変更AがBに依存している場合、BがマージされるまでAをマージすることはできません。 Bを放棄したため、GerritはAを自動的にマージしません。
あなたがする必要があるのはAを修正することです(おそらくgit rebase
)Bに依存しないようにして、変更をGerritに再送信します。
ご参考までに。ユーザーが同じページで送信を2回押すと、「送信済み、マージ保留中」という同じ問題が発生しました(彼女は送信ボタンをダブルクリックしました)。それはGerrit2.11で起こりました。
ログのエラーは次のようになります
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '5173-2-1' for key 'PRIMARY'
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
送信する前は、コミットは1つだけでした(コードの変更)。しかし、ダブルプレスの後、2つのコミットがあります。 2つ目は、新しいコミットメッセージと「送信済み、マージ保留中」ステータスです。
2番目のコミットに関するすべての情報を削除したとき:
$ ssh -p 29418 admin@machine gerrit gsql
gerrit> delete from `patch_set_approvals` where change_id=5173 and patch_set_id=2;
gerrit> delete from `patch_set_ancestors` where change_id=5173 and patch_set_id=2;
gerrit> delete from `patch_sets` where change_id=5173 and patch_set_id=2;
ユーザーGerritCodeReviewによって統合されたものとしてマークされています。
グレッグが述べていることは正しいです、自動マージは不可能です。 Gerritの「チェリーピック」オプション(基本的には手動マージ)を使用して、Aだけを組み込むことができます。残念ながら、これによってGerritの「マージ保留」ステータスが削除されることはありません。コントリビューターがリベースするのに苦労できない場合、私は通常、この効果についてコメントを書きます。
依存関係や競合が発生することなく、「送信済み、マージ保留中」という同じ問題が発生しました。簡単な修正は、開いているすべてのアイテムを調べて、「送信済み、マージ保留中」ステータスの他のコミットがあるかどうかを確認することです。はいの場合は、それらをすべて放棄してください。
次に、git commit --amend -m "元のコメント"とgitPushをもう一度実行します。今回は、修正をマージできます。
タグをブランチ名にプッシュしたため、この問題に直面しました:
git tag x.y.z HEAD
git Push -f Origin x.y.z:master
代わりにブランチをプッシュする方が良いです、
git tag x.y.z HEAD
git Push -f Origin HEAD:master
このようにして、gerritは保留中のパッチを再度マージできます。
男。コミットしたタグがある場合、バグに遭遇する可能性があります。このバグはGerritV2.7で修正されていました。
バグリファレンス: https://groups.google.com/forum/#!topic/repo-discuss/tLVMibfzroc
ターミナル:
ここで、nは、手順2の端末で生成されたコミットのリストの先頭からのコミット数です。
gerritでのコミットをマージします。