Отменить слияние после нажатия
Выполненные шаги:
У меня есть две ветки 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, автоматическое слияние удалило какой-то код и код изменения был нажат, теперь я хочу вернуться в свое первоначальное состояние, чтобы отменить любые изменения. Заглядывая для немедленной помощи?
Ответы
Ответ 1
Вы можете вернуть слияние, следуя официальному руководству, однако это оставляет Git ошибочное убеждение, что объединенные коммиты по-прежнему находятся на целевой ветки.
В основном вы должны:
git revert -m 1 (Commit id of the merge commit)
Ответ 2
Попробуйте использовать git reflog <branch>
чтобы узнать, где была ваша ветка до слияния и git reset --hard <commit number>
чтобы восстановить старую ревизию.
Reflog покажет вам более старые состояния ветки, поэтому вы можете вернуть их в любой набор изменений, который вам нравится.
Убедитесь, что вы находитесь в правильной ветке, когда вы используете сброс git
Чтобы изменить историю удаленных репозиториев, вы можете сделать git push -f
, однако это не рекомендуется, потому что кто-то может alredy загрузить загруженные вами изменения.
Ответ 3
Первый вариант - использование git revert
.
git revert -m 1 [sha-commit-before-merge]
git revert
вернет изменения, но сохранит историю. Поэтому вы не сможете продолжить работу в том же филиале, потому что больше не видите фактической разницы между объединенной веткой и филиалом. Используйте следующий способ удаления истории. Делайте это очень осторожно, если и только в том случае, если вы единственный, кто нажимает изменения на ветку на данный момент.
git reset --hard [sha-commit-before-merge]
git push [origin] [branch] --force