当我在分支中压缩提交时(使用git rebase -i),我总是恼火的是,压缩的提交与旧的提交相结合而不是更新的提交。
我不明白为什么会这样设计。当我提交正在进行的工作(WIP)时,它代表的是无法编译或未完成的代码。当我最终投入"它终于有效了!"在合并之前提交和压缩,将这些WIP提交合并到&#34中更有意义;它最终有效!"提交,而不是与先前的提交相结合。将WIP基本上打破'打破'我之前使用代码编写的代码不能编译。
为了解决这个问题,我的工作流程是压缩来自"它的工作原理!"在第一次WIP提交之前一直回到一个。但这不是傻吗?其他人在做什么,这使得将WIP压缩到之前的提交有意义?
答案 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有一个很好的指南。