web-dev-qa-db-ja.com

Gerritでマージできません

レビューをGerritに送信し、レビューがしばらく保留されている場合、Gerritでcannot mergeメッセージが表示されます。

他の誰かが同じファイルを変更し、私の前に配達したので、私はそれが来ることを理解しました。私は私の問題を解決するために以下の回避策を試みています。

  1. 現在のレビューを破棄します。
  2. 新しいローカルブランチを作成し、プルします
  3. 古いブランチからコミットをチェリーピックして、gerritに送信する

これは機能しますが、私が持っていたものは何でもレビューでコメントできなくなり、レビュアーが再度チェックすることは困難です。

現在のレビューからcannot mergeを削除する方法を探しています。ありがとう!

18
Bhargav Kumar R

「マージできない」問題を解決するために、Gerritの現在の変更を放棄する必要はありません。あなたがする必要があるのは:

  1. ローカルリポジトリを更新する(git fetch)
  2. 手動リベースを実行します(git rebase)
  3. 競合を解決する(git mergetool)
  4. 結果をコミット(修正)します(git commit --amend)
  5. 新しいパッチセットをGerritにプッシュする(git Push)

ほとんどのマージできない問題を解決できるrebaseボタンを試してください。自身でリベースする適切なコミットを見つけることができれば、大丈夫です。それができない場合、ターゲットブランチの最後のコミットを見つけ、コミットの空白を埋めます。場合によっては、最初にコミットを送信する必要があります。このコミットでは、マージできないものが依存関係にあります。とにかく機能しない場合は、それを放棄し、最新のコミットに基づいてコミットを行ってください。

5
ElpieKay

Git/gerritを使用して共有コードベースで作業する場合のベストプラクティスは、個々の変更をできるだけ小さくすることです。単一の大きなコミットで変更を送信する代わりに、コミットごとに1つの論理的な変更を持つ一連の小さなコミットに分割します(ブランチをgerritに送信します)。このワークフロー:

  • 1回の変更で競合の可能性を減らす
  • 競合を簡単かつ迅速に解決します
  • 変更をすばやくレビューする

このように、あなたが下がる前に誰かが彼の変更をマージする可能性。変更をより簡単にレビューできるように、できるだけ早くリベースする必要があります。上流ブランチに対して定期的にリベースすることは、変更を最新の状態に保ち、大きなマージ競合に対処する必要がないことを意味します(解決するために、より小さく、管理しやすい問題が発生します)。

これがあなたの質問に答えるかどうかはわかりませんが、私はこれらの2つのルールに従い、問題はありません。

1
Timotei