Во-первых, сделайте tarball из вашей рабочей папки git. Это позволяет несколько раз попробовать его.
Предположим, произошло следующее
- git checkout another-old-branch
- git rebase master
- некоторые проблемы (которые вы пропустили)
на данный момент вы все еще находитесь в другой ветке, и ваш журнал изменений показывает вам:
6f8348f HEAD@{0}: rebase: <commit message of last commit in another-old-branch>
e547ec0 HEAD@{1}: checkout: moving from another-old-branch to e547ec0d2a558d189464fc57192066b34ec5f28f^0
65cedf8 HEAD@{2}: checkout: moving from master to another-old-branch
Представьте, что ветки похожи на символические ссылки (или указатели), все, что нам нужно сделать, - это позволить ветке 'another-old-branch' указать на старый идентификатор фиксации. старый коммит все еще там, и он не был затронут вашим ребазом. своего рода: «эй, мерзавец, другая старая ветка - e547ec0d2, забудь обо всем, что случилось»
В нашем случае это был e547ec0d2a558d189464fc57192066b34ec5f28f, так что теперь мы должны сделать это
- git checkout another-old-branch #, если вы еще не там
- git reset --hard e547ec0d2a558d189464fc57192066b34ec5f28f
теперь ваша ветвь вернулась в нормальное состояние. И вы можете повторить ваш ребаз.
Обратите внимание, что ваш reflog сейчас немного сложнее, чем приведенный выше пример. но это должно быть где-то там ...
удачи!