如何合并两个git提交

Pet*_*mit 4 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
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*Lee 10

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

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

$ git rebase -i 94126f7^
Run Code Online (Sandbox Code Playgroud)

一位编辑弹出列表中提交转发时间顺序(所以你必须把你的头颠倒).将列出从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
Run Code Online (Sandbox Code Playgroud)

你想要做的是南瓜提交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
Run Code Online (Sandbox Code Playgroud)

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

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