Как изменить проблемы с обзором в 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
это не сработало
- Затем, наконец, я сделал резервную копию файлов. Удалено весь проект. затем клонировали его снова. Вставьте файлы в нужную папку из резервной копии, а затем снова подтвердите их, а затем нажмите. Это сработало.