Как вернуть коммит слияния после интерактивной перебазировки - PullRequest
0 голосов
/ 23 мая 2018

Репо было переименовано в интерактивном режиме, и оно в основном переписало все в одну линейную ветвь и избавилось от коммитов и веток слияния.

Есть ли способ вернуть коммиты слияния после выравнивания истории с помощью интерактивного перебазирования, напримерthis?

Изменения уже принудительно выдвинуты.

Я думаю, что что-то с фильтрацией ветвлений должно сработать, но не может понять это.

1 Ответ

0 голосов
/ 23 мая 2018

Во-первых, «отменить», что было сделано:

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
...