Прочитайте весь ответ перед тем, как делать что-либо, желательно сделать резервную копию git repo (всей папки проекта), если вы чувствуете себя небезопасно, используя, возможно, разрушительные команды.
Если вы не отодвигают изменения после плохого слияния:
Если вы наберете git reflog
вы должны получить версию, которая отмечает свою историю только до того, как сделал ошибочный слияние. Если вас не волнуют какие-либо изменения, которые вы, возможно, сделали с того момента (включая локально зафиксированные/нефиксированные файлы), я бы использовал git reset --hard XYZ
, если XYZ - это ссылка, которая вам понравилась при просмотре git reflog
.
Это приведет к тому, что ваша история будет выглядеть так, как будто ничего плохого не произошло, что я предпочел бы, если бы я никуда не менял никаких изменений (потому что вы действительно не хотите вкручивать с другими людьми историю гит, если они вытащили от пульта, на который вы нажали свои «плохие» изменения).
Если вы подтолкнули изменения после плохого слияния:
Есть много намеков в официальной документации, расположенных здесь: https://github.com/git/git/blob/master/Documentation/howto/revert-a-faulty-merge.txt (эта страница связана с man git revert
).
Я рекомендую вам пропустить большинство из них, чтобы найти некоторые общие соображения и найти случай, который вы хотите попробовать. git revert
сохраняет вашу текущую историю и строит на ней, в отличие от git reset
, которая позволит вам отменить свою историю и «стереть» ее части. Если вы сделали резервную копию своего репозитория git, вы должны быть в состоянии играть и учиться чему-то в то время как на нем :)
Итак, я предпринял шаги, чтобы отменить фиксацию: примечания: Это возвращается commit, реверсирование изменений, сделанных в . Это лучшее, что можно сделать? В моем репо по-прежнему отображается 2x фактических коммитов, а на сетевом графике показаны две принципиально идентичные ветви в paralell. –
grrrrrr
Это обычная практика/любезность не переписывать историю, которая была нажата. Это оставляет один вариант - нажмите изменения, которые выравнивают предыдущие изменения. Как это выглядит в истории git, немного зависит от того, если вы сделали быструю слияние или нет, если вы раздавили коммиты до слияния и т. Д. Вы не должны бояться позволить журналу git показать много коммитов, они просто указатели на объекты git, чтобы они занимали столько места. Я бы предположил, что раздавить возврат не-ff-слияния в отдельный «single commit revert», включая все diff, было бы сложнее отступить. – chelmertz
, так что в основном история будет просто казаться уродливой из-за этой ошибки, но это не имеет большого значения? – grrrrrr