为什么'Git rebase'压缩提交到先前的提交,而不是以下提交?

时间:2013-08-24 16:03:45

标签: git rebase squash

当我在分支中压缩提交时(使用git rebase -i),我总是恼火的是,压缩的提交与旧的提交相结合而不是更新的提交。

我不明白为什么会这样设计。当我提交正在进行的工作(WIP)时,它代表的是无法编译或未完成的代码。当我最终投入"它终于有效了!"在合并之前提交和压缩,将这些WIP提交合并到&#34中更有意义;它最终有效!"提交,而不是与先前的提交相结合。将WIP基本上打破'打破'我之前使用代码编写的代码不能编译。

为了解决这个问题,我的工作流程是压缩来自"它的工作原理!"在第一次WIP提交之前一直回到一个。但这不是傻吗?其他人在做什么,这使得将WIP压缩到之前的提交有意义?

2 个答案:

答案 0 :(得分:0)

那么为什么不使用git reset --soft来重置HEAD(并且只有HEAD)回到第一个WIP,然后从那里提交(使用最新的索引和工作树)最后工作WIP。。

这样,你就可以迅速将这些提交压缩在一起。

点击“How can I squash my last X commits together using git?

了解详情

这反映了我对“Practical uses of git reset --soft?”的结论:

  

每次:

     
      
  • 你对你最终得到的结果感到满意(在工作树和索引方面)
  •   
  • 你不满意所有让你去那里的承诺:
  •   
     

git reset --soft就是答案。

答案 1 :(得分:0)

将你的最新提交压缩成旧的提交应该保持两者的差异。仅仅因为你“选择”旧的提交,并不意味着你的新工作修复了正在进行的工作提交中的错误。

尝试使用git rebase -i HEAD~4,但将4替换为您想要合并的提交数,从HEAD开始,这可能是您的工作状态。

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html上使用交互式rebase有一个很好的指南。