Как изменить проблемы с обзором в Gerrit, когда есть второй более новый обзор

Попытка узнать, как использовать Gerrit и его процесс. Шаги, которые я сделал там, где

  • Нажмите сначала change1 на gerrit для просмотра в HEAD: refs/for/develop
  • Работайте над чем-то еще в одной ветке и нажмите change2 на gerrit для просмотра в HEAD: refs/for/develop

Оба фиксатора имеют строки с измененным идентификатором gerrit

Итак, теперь я хочу решить проблему для change1, поэтому я сделал

git checkout -b change1 <change 1 commit id>

Сделал мои изменения и зафиксировал (добавив Change-ID в сообщение фиксации)

git add .
git commit

Теперь, когда я делаю

git push origin HEAD:refs/for/develop

Я получаю

 ! [remote rejected] HEAD -> refs/for/develop (squash commits first)
error: failed to push some refs to 'ssh://[email protected]:29418/CommunicationsLibrary'

Как я могу исправить проблемы в многоуровневых обзорах и отправить их в gerrit, не создавая еще один обзор?

Ответ 1

Когда у вас есть зависимые отзывы в Gerrit (т.е. одно изменение в обзоре, которое зависит от более раннего изменения, которое одновременно просматривается), и вам нужно внести изменения в более раннее изменение, вам действительно нужно повторно отправить обе версии (поскольку второе изменение становится зависимым от другой "родительской" фиксации)

Итак, ситуация заключается в том, что у вас есть две фиксации в одной ветке от основной ветки разработки, например:

o master
\
 o Commit A (in review, requires change)
 o Commit B (in review, no changes required)

То, что я обычно делаю в этой ситуации, заключается в том, чтобы внести изменения, запрошенные в Commit A, в третьем фиксации. График фиксации теперь выглядит следующим образом:

o master
\
 o Commit A (in review, requires change)
 o Commit B (in review, no changes required)
 o Commit C (modifications to Commit A)

Теперь я делаю git rebase -i master и переупорядочиваю Commit C, чтобы прийти после Commit A, но до Commit B, а затем раздавить его в Commit A. График фиксации теперь выглядит следующим образом:

o master
\ 
 o Commit A' (Commit A, incorporating the changes from Commit C)
 o Commit B' (the same changes made in Commit B, but applied to Commit A' instead of A)

Наконец, git review (или любая команда, которую вы используете для отправки изменений в gerrit), чтобы повторно отправить обе фиксации в Gerrit.

Это из-за таких осложнений, что большинство людей настоятельно рекомендуют работать над каждым отдельным изменением в отдельной ветки, а затем сбрасывать в единую фиксацию перед отправкой на Gerrit, вместо того, чтобы иметь дело с такими типами ситуаций, когда у вас есть зависимые изменения проверяются в одно и то же время.

Ответ 2

Я думаю, что ваша проблема связана с тем фактом, что поправка к 1-й фиксации теперь имеет вторую фиксацию в качестве зависимости. Это то, что я лично сделал бы, но может быть лучше. Я смотрю на него так, как вы хотите переустановить то, как ваши коммиты, и вы имеете дело с последними 3. Поэтому запустите 'git rebase -i HEAD ~ 3'. Это позволяет вам переустановить последние 3 фиксации, переключив порядок или объединив их друг с другом. Вы должны знать, что в нем перечислены коммиты в старейшем порядке. Вот пример:

git log выглядит следующим образом:

информация о фиксации:......

сообщение: foo2

информация о фиксации:......

сообщение: bar1

информация о фиксации:......

сообщение: foo1

После выполнения вышеуказанной команды редактор должен появиться со следующим:

выберите foo1.

выберите bar1.

выберите foo2.

(Предполагается, что ваше второе изменение foo не изменило ни один из файлов, которые были изменены bar1, поскольку это может не сработать, и если вы сделали это, вы все равно внесли поправки в commit.) Затем измените список на это:

выбрать foo1

fixup foo2

pick bar1

После этого у вас будут foo1 и foo2, сжатые в один commit, а bar1 будет следовать за фиксацией. Затем я запустил "git reset --soft HEAD ~ 1", сбросив последнюю фиксацию, а затем "git commit -amend", которая позволяет вам изменить сообщение фиксации для первого обзора и убедиться включить идентификатор изменения. Затем попробуйте свой толчок. После этого у вас должен быть установлен новый патч, и все файлы, которые были внесены во второе изменение, будут изменены и все еще находятся в вашем рабочем каталоге.

Ответ 3

Вызов

commit --ammend

вместо 2-го изменения

Ответ 4

just git commit --amend then git review

Ответ 5

Я попытался с этими попытками

  • сделал git rebase -i master
    это не сработало
  • Затем, наконец, я сделал резервную копию файлов. Удалено весь проект. затем клонировали его снова. Вставьте файлы в нужную папку из резервной копии, а затем снова подтвердите их, а затем нажмите. Это сработало.