4

我已经完成了一系列提交,现在我看到我希望合并 2 个提交。不是最后两个,但有点远

我的日志:

commit 326f35d83963660893d065e480f231b76f052dd2
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:13:47 2010 +0200

    Small editing in ASR chapter

commit 652b4c27a5fcb2125ed82aea31421fca4e8eee47
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:12:55 2010 +0200

    Added longtable package for abbreviations

commit 74069a151cce9c47484403c1db76e68e1360d8ee
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:12:23 2010 +0200

    Changed some headings in the introduction

commit 94126f79fdc6f4927a3f270c152393377e9ef5a5
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:11:57 2010 +0200

    Added abbreviations chapter

所有四个提交都在更改单独的文件,因此不会有任何合并冲突。

我想将 652b4(添加的 longtable)添加到 94126(添加的缩写)提交中。我怎样才能做到这一点?

4

2 回答 2

10

这种情况由交互式 rebase处理。关于不重写已推送历史的标准警告适用。Git Book 中有一个不错的解释,但我个人觉得 的界面rebase -i完全颠倒了。

通过命名您需要修改的最早提交的级来开始 rebase :

$ git rebase -i 94126f7^

弹出一个编辑器,按时间顺序列出提交(所以你必须把头倒过来)列出了从 HEAD 到命名提交的级的每个提交,这就是您命名其父级的原因:

pick 94126f7 Added abbreviations chapter
pick 74069a1 Changed some headings in the introduction
pick 652b4c2 Added longtable package for abbreviations
pick 326f35d Small editing in ASR chapter

您要做的是将提交 652b4c2 压缩到 94126f7 上,因此您将其命令更改为“ squash ”并将其直接移动到后者之后:

pick 94126f7 Added abbreviations chapter
squash 652b4c2 Added longtable package for abbreviations
pick 74069a1 Changed some headings in the introduction
pick 326f35d Small editing in ASR chapter

保存并退出; 弹出的下一个编辑器将用于组合提交消息。你可以随心所欲地改变它,然后当你退出时它会完成变基。

变基时的冲突可能很烦人(一些补丁根本不会通勤),合并可能特别难看,但重新排序文件添加不会有任何问题。

于 2010-12-16T09:40:50.427 回答
3

如果您还没有推送这些提交,请执行git rebase --interactive(请参阅交互式变基)。
您将能够将这两个提交合二为一。

于 2010-12-16T09:29:32.607 回答