Как в Git откатить перебазирование, если оно вас не устраивает?
В Git нет пробной версии для перебазирования. Если я выполнил перебазирование и еще не нажал на него, как мне вернуться к предыдущему состоянию, как будто этого никогда не было?
Как в Git откатить перебазирование, если оно вас не устраивает?
В Git нет пробной версии для перебазирования. Если я выполнил перебазирование и еще не нажал на него, как мне вернуться к предыдущему состоянию, как будто этого никогда не было?
Ответы:
Вы можете использовать журнал ссылок, чтобы найти первое действие до начала перебазирования, а затем сбросить --hard обратно к нему. например
$ git reflog
b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...
$ git reset HEAD@{2} --hard
Теперь вы должны вернуться к тому, что было до начала перебазирования.
Чтобы найти правильное место для сброса, вы просто выбираете ближайшую к началу запись, которая не начинается с «rebase».
Если перебазирование - это единственное, что вы сделали в ветке, то есть у вас нет неопубликованных коммитов / изменений, вы можете просто удалить локальную ветку с помощью, git branch -Dа затем проверить ее снова:
$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
Или для того же эффекта вы можете сбросить --hard на исходную ветку:
$ git reset --hard origin/my-branch
Если вы сделали это, пока у вас были другие не отправленные коммиты, вы потеряете их. В этом случае просто используйте подход reflog, описанный выше, чтобы вернуться к записи reflog, в которой вы сделали фиксацию (и).
ORIG_HEADисходное значение хэша перебазируемой ветки. Поэтому вместо того, чтобы искать номер 2 для HEAD@{2}, вы можете просто использовать ORIG_HEAD... но только в том случае, если ORIG_HEADон еще не нарушен. Его устанавливают несколько команд Git (rebase, am, reset и merge при различных обстоятельствах).
Rebase сохраняет резервную копию старого состояния как ORIG_HEAD.
Таким образом, вы можете отменить последнее перебазирование, запустив:
git reset --hard ORIG_HEAD