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 然后将重新设置所有提交的基线,并提示您手动合并要合并的这两个提交的提交消息。
我已阅读有关合并两个按顺序排列的提交的内容,但我如何合并两个彼此不直接的提交。
比如,我当前的提交与旧提交
提交顺序
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 然后将重新设置所有提交的基线,并提示您手动合并要合并的这两个提交的提交消息。