如何合并两个git提交

时间:2010-12-16 09:21:59

标签: git git-rebase

我做了一系列提交,现在我看到我希望合并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(添加缩写)提交。我怎么能这样做?

2 个答案:

答案 0 :(得分:10)

这种情况由interactive rebase处理。关于不重写已推送历史的标准警告适用。有一个不错的解释in the 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,所以你将它的命令改为“压缩”并在后者之后直接移动它:

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

保存并退出;弹出的下一个编辑器将用于组合提交消息。您可以根据需要更改此项,然后退出时将完成变基。

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

答案 1 :(得分:3)

如果您尚未推送这些提交,请执行git rebase --interactive(请参阅Interactive Rebasing) 您将能够将这两个提交合并为一个。