Ответ 1
Вы можете использовать reflog, чтобы найти первое действие перед началом перезагрузки, а затем reset - вернуться к нему. например.
$ git reflog
b710729 [email protected]{0}: rebase: some commit
5ad7c1c [email protected]{1}: rebase: another commit
deafcbf [email protected]{2}: checkout: moving from master to my-branch
...
$ git reset [email protected]{2} --hard
Теперь вы должны вернуться к началу перезагрузки.
Чтобы найти нужное место для reset to, вы просто выбираете ближайшую вершину, чтобы не начинал с "rebase".
Альтернативный подход
Если 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
Или для того же эффекта, вы могли бы reset -hard в ветке происхождения:
$ git reset --hard origin/my-branch
Если вы делали это, пока у вас были другие нечеткие коммиты, вы потеряли бы их. В этом случае просто используйте подход reflog выше, чтобы вернуться к записи reflog, где вы сделали фиксацию.