2013-06-27 6 views
3

Gerrit случайно представил некоторые комманды слияния (с настройкой «Слить при необходимости»), и я хотел бы удалить их из истории. Я знаю о подводных камнях истории перезаписи, когда команда работает с Git, но разработчики не пострадают от этого в нашем случае, так как ни у одного из них нет локальных изменений в этом конкретном репозитории.Как переписать историю на gerrit?

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

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

On branch master Your branch and 'origin/master' have diverged, and have 7 and 9 different commits each, respectively. (use "git pull" to merge the remote branch into yours) nothing to commit, working directory clean

Что я хочу (9 фиксаций минус 2 слияния совершает).

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

The change could not be merged due to a path conflict. Please rebase the change locally and upload the rebased commit for review.

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

ответ

3

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

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

+0

Спасибо за ваш ответ, но когда я выполняю следующую команду: «git push -f origin HEAD: refs/heads/master», я получаю сообщение об ошибке:! [удаленный отказ] HEAD -> ошибка master (non-fast forward): не удалось нажать некоторые ссылки на 'ssh: // repositories: 29418/repository'. У меня есть следующие права на refs/heads/*: Создать ссылку/Push/Submit. Нужно ли мне еще? –

+0

Да, но имя разрешения зависит от вашей версии Gerrit. См. Http://gerrit-documentation.googlecode.com/svn/Documentation/2.6/access-control.html#category_push - Прямой push: параметр Force Позволяет удалить существующую ветку. Поскольку принудительное нажатие эффективно удаляет сразу же после создания, но выполняется атомарно на сервере и регистрируется, этот параметр также разрешает принудительные push-обновления ветвям. Включение этой опции позволяет исключить существующие коммиты из истории проекта. – Brad

+0

Он отлично работал с силовым вариантом! Благодарю. –

Смежные вопросы