`git squash`两个提交到后一个

时间:2014-02-21 15:11:46

标签: git

我熟悉使用壁球来清理我的树枝,但压扁的文字是 use commit, but meld into previous commit,它将使用之前提交中的消息。我想知道是否有办法让它快速使用以后的提交(或者更确切地说,汇总文件更改并使用稍后提交的消息)

一个例子:

  • 443f7287:“修复了很多东西”(按时间顺序排列第二次
    • 文件A,B和C
  • 0ebbd9c0:“我必须暂时切换曲目时的部分提交”(按时间顺序首次提交
    • 文件D,E和F

在这里运行一些东西并以

结束
  • 443f7287:“修复了很多东西”
    • 文件A,B,C,D,E和F

我知道我可以使用rebase,通过压缩443f7287,然后手动将其提交消息复制到生成的提交中,但我希望没有交互式rebase屏幕的单行程序。从理论上讲,当我改变曲目而不是提交曲目时,我可以隐藏我的变化,但是当我试图学习藏匿时,我并没有真正得到很多牵引力。

有没有办法快速实现我的目标?有更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果这些提交位于您的分支的最前端,并且您当前正在处理443f7287中可能发生的更改,则可以使用git commit --amend而不是制作第二次提交。这将提示您编辑前一次提交的提交消息,此时您可以指定所需的提交消息。

如果您正在尝试编辑历史较深处的提交,我不相信有一种简单的方法可以避免使用其他人共享的交互式rebase步骤。

答案 1 :(得分:0)

如果你愿意使用交互式rebase,你可以轻松做的一件事是采取两行

pick 0ebbd9c0 Partial commit from when I had to switch tracks temporarily
pick 443f7287 Fixes a lot of stuff

并重新排序

pick 443f7287 Fixes a lot of stuff
pick 0ebbd9c0 Partial commit from when I had to switch tracks temporarily

然后将第二个更改为“fixup”:

pick 443f7287 Fixes a lot of stuff
f 0ebbd9c0 Partial commit from when I had to switch tracks temporarily

这与将两者压缩在一起具有相同的效果,但它会自动获取第一个提交消息(“修复很多东西”)而不需要任何进一步的提示。