Git - 合并两个不按顺序排列的提交 - 已将提交推送到远程仓库

Git - Merging two commits which are not in serial sequence - Commits pushed to remote repo already

我已阅读有关合并两个按顺序排列的提交的内容,但我如何合并两个彼此不直接的提交。

比如,我当前的提交与旧提交

提交顺序

er34rwe commit4
rtt45y5 commit3
iwe8j89 commit2
4E89E8J commit1

现在,我需要将 commit4 与 commit2 合并,并可能将结果放在 commit2 的位置。所以结果是

rtt45y5 commit3
iwe8j89 commit2_4 <-- new one
4E89E8J commit1

如果提交已经推送到远程存储库,有没有办法做到这一点?和远程存储库有新的历史。即两个提交都显示为一个。

您可以为此使用交互式变基。假设 er34rwe 是最早的提交,这样做:

git rebase -i er34rwe

这将启动您的编辑器并显示如下视图:

pick er34rwe commit4
pick rtt45y5 commit3
pick iwe8j89 commit2
pick 4E89E8J commit1

然后您可以先通过简单地移动这些行来更改这些提交的顺序:

pick rtt45y5 commit3
pick er34rwe commit4
pick iwe8j89 commit2
pick 4E89E8J commit1

然后你也可以把pick改成另一种模式(它们在编辑器的底部有解释)来改变它们。在您的情况下,您想将 commit2 更改为 squash 以将其合并到前一个(commit4 – 文件从 top/oldest 读取到 bottom/newest提交):

pick rtt45y5 commit3
pick er34rwe commit4
squash iwe8j89 commit2
pick 4E89E8J commit1

然后保存并退出编辑器以开始该过程。 Git 然后将重新设置所有提交的基线,并提示您手动合并要合并的这两个提交的提交消息。