如何在交互式rebase之后恢复合并提交

时间:2018-05-23 00:52:35

标签: git rebase

repo是交互式的,它基本上将所有东西重新组合成一个线性分支,并且摆脱了合并提交和分支。

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

这些变化已经被推动了。

我认为使用分支过滤的东西应该可以解决这个问题,但不能完全理解它。

1 个答案:

答案 0 :(得分:1)

首先,"撤消"做了什么:

git reflog将提供历史HEADS列表(例如,当前的SHA'是什么)。参与rebase的每个单独的SHA,包括在发生任何变基之前的那个,应该仍然在某个地方(假设它们没有过期)。

在发生任何变基之前找到"" SHA并命名它(git GUI查看器,如gitk,或GitKraken可能会有帮助):

git branch before-rebase-flattening <SHA>

现在,重做你的rebase,但--preserve-merges。使用新的分支,以免弄乱你的&#34;备份&#34; before-rebase-flattening分支:

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

如果在任何时候,你搞砸了并想重试rebase:

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