Git / gerrit, push remote отклонен, никаких изменений не внесено

Внес изменения в коммит, выполнил коммит исправление. Сделайте толчок, и я получаю сообщение об ошибке:

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

Проверил идентификатор изменения в сообщении о коммите, и он по-прежнему действителен.

Я попытался изменить файл, проверить, что он отображается как изменение, а затем добавить в промежуточную область и внести еще одно исправление фиксации. Попробуйте нажать еще раз и получите ту же проблему. Понятия не имею об этом.

Изменить: это подталкивает к gerrit, а не к git напрямую.

Я бегу:

git push origin master:refs/for/master

И результат получения сведений о происхождении (с отредактированными данными о компании):

$ 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)

person edwardmlyte    schedule 21.12.2012    source источник
comment
Какую команду push вы используете и в какой ветке вы находитесь локально?   -  person Amber    schedule 21.12.2012
comment
Я нахожусь на мастере локально, и я запускаю git push origin master:refs/for/master, а источник настроен с действительными URL-адресами для получения и отправки.   -  person edwardmlyte    schedule 21.12.2012
comment
Учитывая, что вы используете синтаксис refs/for/..., а не refs/heads/..., используете ли вы Gerrit? Если да, то это будет очень актуально для вашего вопроса и должно быть упомянуто.   -  person Amber    schedule 21.12.2012
comment
Ах да, я использую gerrit. Я обновлю вопрос.   -  person edwardmlyte    schedule 21.12.2012
comment
Обычно я делаю git push origin HEAD:refs/for/master, когда нажимаю на gerrit.   -  person Ilion    schedule 21.12.2012


Ответы (9)


Эта проблема связана с действиями, которые я выполнил ранее. Я пытался push внести новое изменение вдобавок к изменению, которое все еще находилось на рассмотрении, родительский элемент которого также должен был быть рассмотрен.

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

Я использовал cherry-pick, чтобы получить эти два изменения локально (Родитель A и Родитель B), а затем третий cherry-pick, чтобы получить свое изменение из локальной ветки перед попыткой push. Вот что вызвало проблему, потому что мое личное изменение, по сути, было попыткой переписать историю.

Правильным процессом будет только pull родитель B, когда он находится в магистрали. Это автоматически подтягивает любые коммиты между транком и им (в данном случае только Parent A). Затем cherry-pick мое новое изменение вдобавок к этому, и push будет работать нормально.

person edwardmlyte    schedule 09.01.2013
comment
У нас сегодня была с этим проблема. Проблема заключалась в том, что у нас было в gerrit: Change1 (объединенный) -- Change2 (необъединенный) -- Change3 (необъединенный) Мы хотели опубликовать новый патч, установленный на Change3, но нам было отказано. Сообщение: ! [remote rejected] master -> refs/for/master (no changes made) Почесав затылок, мы обнаружили, что сделали локальную перебазировку и что Change2 также получил новый хэш коммита, но в нем не было новых изменений. Мы решили эту проблему, снова перебазировав интерактив локально и переформулировав Change2, добавив символ в конце сообщения фиксации. После этого можно было публиковать. - person mortb; 18.06.2015

Пожалуйста, обратитесь к официальной документации по этому вопросу здесь:

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

У меня была та же проблема, моя проблема заключалась в том, что я отправил изменение, затем отказался от этого слияния, затем я сделал несколько настроек, ошибочно исправил свою фиксацию и снова отправил. Вот где я получил ошибку.

Мое исправление:

  1. Если вы просто хотите быстро обойти эту проблему, выполните git commit --amend, удалите существующий change-Id, предполагая, что у вас настроены git-хуки, вы можете завершить коммит, и вам должен быть назначен новый change-Id.
  2. Зайдите в gerrit и найдите свой существующий change-Id, выясните, что происходит, и исправьте соответствующим образом. (рекомендуемые)
person benjaminz    schedule 15.03.2017

Если вы пытаетесь обновить набор обзоров, каждый со своим собственным идентификатором изменения, который вы хотите сохранить (скажем, после перебазирования, когда вы меняете порядок двух коммитов), вы можете получить отказ, если некоторые из коммитов в ворс остается без изменений. Вы должны принудительно сгенерировать новый хеш, переформулировав коммиты или что-то подобное.

person Matt Montag    schedule 15.01.2014
comment
Мне пришлось выполнить git commit --amend без изменений, и это, похоже, решило мою проблему. - person Stuart; 29.09.2015

Я была такая же проблема. Просто изменил сообщение коммита и нажал код. Это было успешно.

person schin chan    schedule 28.08.2018
comment
У меня есть несколько коммитов, и я хочу отправить их все, как я могу это сделать? - person Sazzad Hissain Khan; 12.08.2020

Похоже, вы все делаете правильно, поскольку проверяете, что вы внесли изменение, которое должен принять Геррит.

git push origin master:refs/for/master

Может в этом проблема? Если ваши изменения не находятся в вашей локальной версии основной ветки, вы не отправляете свои изменения. Вместо этого попробуйте:

git push origin HEAD:refs/for/master

HEAD — это ярлык, представляющий ваш текущий коммит в git.

person Brad    schedule 21.12.2012
comment
Та же ошибка с этим ярлыком. Относится ли HEAD к текущему изменению в текущей ветке или только к текущему изменению в главной ветке? - person edwardmlyte; 02.01.2013
comment
HEAD относится к вашему текущему изменению, и точка. Ветка, на которой вы находитесь, не имеет значения. Если нажатие с помощью HEAD не помогает, я подозреваю, что ваше исправление не изменило фиксацию. Попробуйте обновить/изменить сообщение коммита при внесении изменений, а затем снова нажать. - person Brad; 02.01.2013
comment
Спасибо за вашу помощь, Брэд, узнал, что неправильно использовал git. - person edwardmlyte; 09.01.2013

Я была такая же проблема. В то же время был еще один коммит, который не был слит с мастером и находился в проверке gerrit и перебазирован в gerrit. т. е. код отправлен на проверку. перебазирован в gerrit и ожидает завершения обзора. После того, как код был просмотрен, я смог нажать без ошибок.

person NullPointerException    schedule 25.04.2014

У меня было такое же сообщение об ошибке, но изменения, которые я пытался внести, были поверх других коммитов из исходного набора изменений (сделал несколько фокусов с git cherry-pick, и, похоже, Герриту это не понравилось). Я отказался от своего первоначального изменения, а затем снова открыл его, когда понял, что могу решить проблему, но не смог отправить gerrit с git review.

На данный момент моим быстрым решением было отказаться от первоначального изменения с веб-сайта gerrit и создать новое изменение, удалив последнюю строку change-Id: sha1 из сообщения коммита с помощью git commit --amend.

person GabLeRoux    schedule 25.11.2014

С этим сообщением об ошибке Геррит отклоняет отправку фиксации в качестве нового набора исправлений для изменения, если отправленная фиксация идентична текущему набору исправлений этого изменения.

Выдвинутая фиксация считается идентичной текущему набору исправлений, если

  • файлы в коммите,
  • сообщение фиксации,
  • автор коммита и
  • родители коммита

все идентичны.

person Androina Yang    schedule 16.08.2016

Мое простое решение - обновить проект, а затем зафиксировать и нажать.

Это поможет, потому что мастер и ваша локальная ветка несовместимы. Это может быть, когда вы, возможно, перебазируете на gerrit...

person Raay Schneider    schedule 20.11.2019