git交互式rebase压缩到下一次提交

Git中我可以使用交互式rebase来重写历史记录,这很好,因为在我的功能分支中,我使用部分工作代码进行了大量提交,因为我探索了不同的重构和完成它的方法.

在重新定位或将分支合并到master之前,我想将很多提交压缩在一起.

一些从第一个(顶部)到底部(最后一个)按顺序组成提交

1. Initial commit on feature branch "Automatic coffee maker UI"
2. Add hot chocolate as product
3. Add tea as product. Products are now generic
4. Create in memory data store for adapter tests
5. Cry because I can't get entity framework to create a composite key. Integration tests broken.
6. Implemented composite key!!
7. All tests green and feature done!

让我们说我想继续提交3,4和7.

使用rebase我想“压缩”提交

> 1和2进入3.
> 4次入住
> 5和6进入7

理想情况下,我会做互动式反思

1. squash
2. squash
3. pick (contains the work of 1 & 2)
4. pick 
5. squash
6. squash
7. pick (contains the work of 5 & 6)

但这是倒退,因为squash将提交与其先前的提交合并.我无法弄清楚如何让它向前挤压.

我是否很难,我是否应该接受不起作用(我宁愿让它工作),还是有办法实现这一目标?

我正在调用此命令

git checkout My-feature-branch
git rebase master -i

然后我正在编辑出现的提交列表,并尝试通过保存文件和编辑编辑器来完成它,这通常适用于我.

最佳答案
您还需要对提交进行重新排序,以便在可行的情况下,在要进行压缩的提交之前进行要保留的提交.

如果这不可行,那么因为你会遇到你不想解决的冲突,就这样做吧

1. pick
2. squash
3. squash
4. pick 
5. pick
6. squash
7. squash

当南瓜完成后,您可以编辑提交消息以包含您希望最终提交的消息.非常简单. 🙂

你甚至可以做到

1. pick
2. fixup
3. squash
4. pick 
5. pick
6. fixup
7. squash

然后我认为应该只提交一次提交消息编辑器,就像使用fixup一样,只需在不启动编辑器的情况下获取上一个提交消息.

在提交消息编辑器触发时,您还可以获得两个提交消息,即要被压缩的提交消息和要被压缩的提交消息,这样您就可以简单地删除您不想要的提交消息保持.

转载注明原文:git交互式rebase压缩到下一次提交 - 代码日志