如何在交互式变基后恢复合并提交

How to bring back merge commits after an interactive rebase

repo 是交互式的 rebase,它基本上将所有内容倒带到一个线性分支中,并摆脱了合并提交和分支。

有没有办法在像这样使用交互式 rebase 展平历史后恢复合并提交?

更改已强制推送。

我想一些带有分支过滤的东西应该可以解决问题,但不太明白。

首先,"undo"做了什么:

git reflog 将提供历史 HEADS 列表(a.k.a 是 'the current SHA' 的内容)。涉及变基的每个单独的 SHA,包括发生任何变基之前的那个,应该仍在该历史记录中的某个地方(假设它们没有过期)。

找到 "before any rebasing happened" SHA 并命名(git GUI 查看器,如 gitk,或 GitKraken 可能有帮助):

git branch before-rebase-flattening <SHA>

现在,重做你的 rebase,但是使用 --preserve-merges。使用新分支以免弄乱您的 "backup" before-rebase-flattening 分支:

git checkout before-rebase-flattening
git checkout -b rebase-attempt
git rebase -ip <whatever you did before>

如果您在任何时候搞砸了并想重试变基:

git rebase --abort

如果你的 rebase 成功并且 rebase-attempt 是你喜欢的方式,那么将你的原始分支移动到 rebase-attempt 的 SHA,并清理 rebase 分支:

git checkout <your original branch>
git reset --hard rebase-attempt
git branch -D rebase-attempt
git branch -D before-rebase-flattening