Шаги, которые я выполнил:
У меня две ветки: branch1 и branch2,
$git branch --Initial state
$branch1
$git checkout branch2
$git pull origin branch1 --Step1
Я разрешаю конфликты и
$git commit -m "Merge resolved"
тогда
$git checkout branch1
$git merge branch2
$git push origin branch1
Теперь я понял, что, находясь на шаге 1, автоматическое слияние удалило некоторый код, и код изменения был выдвинут, теперь я хочу вернуться в исходное состояние, чтобы отменить любые изменения. Ищу немедленную помощь?
git
git-revert
Bijendra
источник
источник
Ответы:
Вы можете отменить слияние, следуя официальному руководству , однако это оставляет Git ошибочным убеждением, что объединенные коммиты все еще находятся в целевой ветке.
В основном вам необходимо:
источник
1
. Это означаетfirst
родительский коммит слияния. Но если один (гипотетически) «случайно» слил мастер с веткой, затем мастер с быстрой переадресацией перешел к объединенному коммиту - нужно использовать-m 2
для отмены слияния на мастере.1
. Это испортило мой репозиторий, частично отменив слияние, тогда как я хотел полностью отменить слияние. В итоге я вернул откат!Попробуйте использовать,
git reflog <branch>
чтобы узнать, где была ваша ветка до слияния, иgit reset --hard <commit number>
восстановить старую ревизию.Reflog покажет вам более старые состояния ветки, так что вы можете вернуть его в любой набор изменений, который вам нравится.
Убедитесь, что вы находитесь в правильной ветке, когда используете git reset
Вы можете изменить историю удаленного репозитория
git push -f
, однако это не рекомендуется, поскольку кто-то уже может загрузить изменения, внесенные вами.источник
Первый вариант - это использование
git revert
.git revert
Будет откатить изменения , но сохранит историю. Поэтому вы не сможете продолжить работу в той же ветке, так как вы больше не можете видеть фактическую разницу между объединенной ветвью и вашей функциональной веткой. Используйте следующий способ, чтобы удалить историю. Делайте это очень осторожно, если и только если вы в данный момент единственный, кто вносит изменения в ветку.источник
В моем случае я объединил свою ветку (скажем: my-branch) с другой функциональной веткой (feature-branch), но не с master. Итак, история моей ветки была такой:
После слияния его с другим, у
feature-branch
которого были коммитыf1, f2
поверх мастера, он стал таким:Это могло произойти из-за того, что во время работы над моей веткой я выполнил слияние из master после 2 коммитов, или одна из 2 веток могла быть не в актуальном состоянии с master. Таким образом, в этом случае
git revert -m 1
он не работал, так как он оставил ихf1
иf2
зафиксировал между ними.Решение было простым, и оно будет работать в обычных сценариях, когда у нас нет промежуточных коммитов:
Вместо 6 используйте соответствующее число в зависимости от того, сколько прошлых коммитов вы хотите изменить. Теперь редактор Vim открыт, просто отметьте нежелательные коммиты такими
drop
же и выйдите, используя:wq
журнал проверки:принудительный толчок
Теперь удаленная ветка должна быть в предыдущем состоянии.
источник