Во-первых, «отменить», что было сделано:
git reflog
предоставит список исторических ГОЛОВ (то есть, каким был «текущий SHA»).Каждый отдельный SHA, участвующий в перебазировании, в том числе тот, который произошел непосредственно перед тем, как произошла перебазировка, должен быть где-то в этой истории (при условии, что у него не истек срок действия).
Найти это «до того, как произошла перебазировка», SHA иназовите его (например, средства просмотра графического интерфейса git gitk
, или GitKraken может помочь):
git branch before-rebase-flattening <SHA>
Теперь, повторите ваш ребаз, но с --preserve-merges
.Используйте новую ветку, чтобы не связываться с вашей «резервной копией» before-rebase-flattening
ветка:
git checkout before-rebase-flattening
git checkout -b rebase-attempt
git rebase -ip <whatever you did before>
Если в какой-то момент вы запутались и хотите повторить ребаз:
git rebase --abort
Если ваша перебазировка прошла успешно и вам нравится rebase-attempt
, возьмите исходную ветку, переместите ее в SHA rebase-attempt
и очистите ветки перебазировки:
git checkout <your original branch>
git reset --hard rebase-attempt
git branch -D rebase-attempt
git branch -D before-rebase-flattening