Как переписать историю на gerrit?

Геррит случайно ввел некоторые коммиты слияния (настроенные с опцией «Объединить, если необходимо»), и я хотел бы удалить их из истории. Я знаю о подводных камнях переписывания истории при командной работе с Git, но в нашем случае разработчики от этого не пострадают, так как ни у кого из них нет локальных изменений именно в этом репозитории.

Я сделал git rebase -i локально, и Git автоматически удалил коммиты слияния Геррита. Я тщательно удалил предыдущие идентификаторы изменений Gerrit в каждом сообщении коммита, а хук сообщений коммита Gerrit добавил новые.

вывод команды git status:

На мастере ветки Ваша ветка и «происхождение/мастер» расходятся и имеют 7 и 9 разных коммитов соответственно. (используйте «git pull», чтобы объединить удаленную ветку с вашей) ничего не нужно коммитить, рабочий каталог чист

Это то, что я хочу (9 коммитов минус 2 коммита слияния).

Когда я пытаюсь нажать на Геррита с помощью git push origin HEAD:refs/for/master, я не получаю никакой ошибки. Однако, когда я пытаюсь просмотреть и отправить через веб-интерфейс Gerrit, я получаю следующую ошибку:

Не удалось объединить изменение из-за конфликта путей. Перебазируйте изменение локально и загрузите измененную фиксацию для проверки.

Что я сделал не так?


person Romain Hautefeuille    schedule 27.06.2013    source источник


Ответы (1)


При переписывании истории вы не будете настаивать на пересмотре (не настаивайте на refs/for/*). Вам нужно отправить напрямую в необработанный репозиторий (refs/heads/*). Это означает, что вам потребуются разрешения, чтобы обойти проверку в Gerrit. Я бы порекомендовал просто временно дать себе разрешения и удалить их, как только это будет сделано, чтобы вы случайно не обошли проверку в будущем.

Вам также нужно будет запустить git push с флагом -f, чтобы указать git переписать историю.

person Brad    schedule 27.06.2013
comment
Спасибо за ваш ответ, но когда я выполняю следующую команду: git push -f origin HEAD:refs/heads/master, я получаю сообщение об ошибке: ! [удаленное отклонение] HEAD → главная (не быстрая перемотка вперед) ошибка: не удалось отправить некоторые ссылки в «ssh://repositories:29418/repository». У меня есть следующие права на refs/heads/* : Create Reference/Push/Submit. Мне нужно еще немного? - person Romain Hautefeuille; 28.06.2013
comment
Да, но название разрешения зависит от вашей версии Gerrit. См. gerrit-documentation.googlecode.com/svn/Documentation. /2.6/ — Прямая отправка: опция Force Позволяет удалить существующую ветку. Поскольку принудительная отправка фактически представляет собой удаление, за которым сразу же следует создание, но выполняемое атомарно на сервере и регистрируемое в журнале, этот параметр также разрешает принудительные принудительные обновления веток. Включение этой опции позволяет исключить существующие коммиты из истории проекта. - person Brad; 01.07.2013