web-dev-qa-db-ja.com

Git / gerrit、プッシュリモートは変更を拒否しました

コミットに変更を加え、コミットの修正を実行しました。プッシュを実行すると、エラーが表示されます。

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

コミットメッセージの変更IDと、まだ有効なコミットを確認しました。

ファイルを変更して、変更として表示されることを確認してから、ステージング領域に追加し、別のコミット修正を行いました。もう一度プッシュを試して、同じ問題を取得します。これについてはわかりません。

編集:これはgitではなくgerritにプッシュしています。

私は走っています:

git Push Origin master:refs/for/master

そして、Originの詳細を取得した結果は次のとおりです(会社の詳細を編集して)。

$ git remote show Origin
* remote Origin
  Fetch URL: ssh://[email protected]:29418/myrepo
  Push  URL: ssh://[email protected]:29418/myrepo
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master rebases onto remote master
  Local ref configured for 'git Push':
    master pushes to master (up to date)
36
edwardmlyte

この問題は、以前に実行したアクションが原因です。まだレビューの段階にある変更に加えて、新しい変更をPushしようとしていました。誰の親もレビューの対象でした。

 Trunk ------ Parent A ----- Parent B ----- New change
(merged)     (unmerged)     (unmerged)

私はcherry-pickこれら2つの変更をローカルで取得する(親Aと親B)、そして3番目のcherry-pickPushを試みる前にローカルブランチから私の変更を取得します。私の個人的な変更は本質的に履歴を書き直そうとしていたため、それが問題の原因です。

正しいプロセスは、トランクにいるときにpull Parent Bのみにすることです。これにより、トランクとそのトランク(この場合は単に親A)間のコミットが自動的にプルアップされます。その後、cherry-pickその上での私の新しい変更とPushは問題なく動作します。

50
edwardmlyte

この問題に関する公式ドキュメントは、次を参照してください。

https://gerrit-review.googlesource.com/Documentation/error-no-new-changes.html

私は同じ問題を抱えていました、私の問題は、変更をプッシュし、そのマージを放棄し、いくつかの微調整を行ったことでした間違ってコミットを修正し、再び押した。それは私がエラーを得た場所です。

私の修正:

  1. この問題をすばやく回避したい場合は、git commit --amend、既存のchange-Id、gitフックがセットアップされていると仮定すると、コミットと新しいchange-Idを割り当ててください。
  2. Gerritに移動して、既存のchange-Id、何が起こっているかを把握し、それに応じて修正します。 (推奨)
5
benjaminz

一連のレビューを更新しようとする場合、それぞれが維持したい独自のchange-idを使用して(たとえば、2つのコミットの順序を入れ替えるリベース後)、一部のコミットがパイルは変更されません。コミットなどを変更して、新しいハッシュを強制的に生成する必要があります。

2
Matt Montag

Gerritが取り上げるべき変更を加えたことを確認する限り、すべてを正しく行っているように思えます。

git Push Origin master:refs/for/master

たぶんこれが問題ですか?変更がmasterブランチのローカルバージョンにない場合は、変更をプッシュしていません。代わりに試してください:

git Push Origin HEAD:refs/for/master

HEADは、gitでの現在のコミットを表すショートカットです。

1
Brad

私は同じ問題を抱えていました。コミットメッセージを変更し、コードをプッシュしただけです。成功しました。

1
schin chan

同じエラーメッセージが表示されましたが、プッシュしようとした変更は、元の変更セットとは異なるコミットの上にありました(git cherry-pickでいくつかのマジックトリックを行い、gerritはそれを好まなかったようです)。元の変更を破棄し、問題を解決できることに気付いたときに再度開きましたが、git reviewでgerritに送信できませんでした。

この時点での私の簡単な解決策は、gerrit Webサイトからの元の変更を放棄し、change-Id: sha1を使用してコミットメッセージからgit commit --amend最後の行を削除することで新しい変更を作成することでした。

0
GabLeRoux

プッシュされたコミットがこの変更の現在のパッチセットと同一である場合、このエラーメッセージにより、Gerritは変更の新しいパッチセットとしてコミットをプッシュすることを拒否します。

プッシュされたコミットは、現在のパッチセットと同一であると見なされます。

  • コミット内のファイル、
  • コミットメッセージ、
  • コミットの作成者と
  • コミットの親

すべて同じです。

0
Androina Yang

同じ問題がありました。同時に、マスターにマージされていない別のコミットがあり、gerritでレビューされ、gerritでリベースされました。つまり、レビューのためにプッシュされたコード。 gerritでリベースし、完了するまでレビューを保留します。コードを確認したら、エラーなしでプッシュできました。