Возврат коммита, случайно выдвинутого непосредственно к герриту - PullRequest
0 голосов
/ 10 октября 2019

Давайте начнем с того, что проект gerrit настроен неправильно, так как он разрешил то, что произошло

Вместо того, чтобы нажимать на refs / for / my_branch, я отправил прямо в свою ветку, то есть

git push

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

 git push -f origin <previous_commit_hash>:refs/head/my_branch

Я надеялся, что ветка вернется в прежнее состояние, поэтому я мог снова нажать, на этот раз правильно. Это действие имело только пометку предыдущего коммита зеленой меткой с надписью head / my_branch.

Затем я попытался выполнить локальный сброс, а затем сразу нажал на gerrit:

git reset --hard <previous_commit_hash>
git push -f origin my_branch

Подтверждение было отклонено, потому что «Обновления были отклонены, потому что кончик вашей текущей ветви находится позади его удаленного аналога ...»

Коммит - это просто CSV-файл с содержимым для вкладки справки, поэтому он скорее выигралСам по себе ничего не сломаю, но я не хочу иметь грязную историю или другие непредвиденные последствия. Желательно, чтобы я перевел удаленную ветку в исходное состояние и повторно отправил свои изменения, на этот раз правильно. С тех пор как это произошло, никто не отталкивался от этой ветви и не вытягивал ее. Какой лучший способ продолжить?

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Проблема возникла из-за того, что вы выполняете:

git push -f origin <previous_commit_hash>:refs/head/my_branch

Но правильно выполнить:

git push -f origin <previous_commit_hash>:refs/heads/my_branch

С «головами» вместо «головы».

Если вы используете "refs /heads / my_branch", Геррит понимает, что вы хотите перейти прямо к ветке "my_branch". Когда вы использовали «refs / head / my_branch», Геррит понял, что вы хотели бы создать новую ветку с именем «head / my_branch».

Выполните правильную команду, чтобы исправить проблему, и удалите «head / my_branch»используя интерфейс Gerrit.

0 голосов
/ 13 октября 2019

Вы можете использовать git revert, чтобы создать новый коммит (отменить изменение), и git push, как вы это сделали со случайным коммитом. Это приведет ветвь HEAD к тому же функциональному состоянию, что и раньше, но с другим SHA. После чего вы должны немедленно исправить конфигурацию репозитория, которая допускала такие прямые добавления.

История будет по-прежнему показывать обе фиксации, но ИМХО, это лучший / более безопасный подход, чем переписывание истории источника (который несет риск не быть правильно подобранным местными репозиториями).

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

...