首页 > 解决方案 > 使用 git rebase -i 压缩单个分支上的提交,遇到合并冲突

问题描述

几周前,我被要求使用 git rebase -i 将一组 4-5 个连续提交压缩为 1 个提交。从那以后有一些提交。所以在下图中,我想将 B 到 F 的提交压缩为一个提交:

A - B - C - D - E - F - G - H - I ...
    |               |
    - Want to squash- 

我跑

git rebase -i 8007a14d

(其中 8007a14d 是 A 的哈希),找到我要压缩的提交,然后关闭文件。但关闭后,我被要求解决几个合并冲突。由于对提交 G 之后的代码不太熟悉,我决定中止。

这对我来说似乎有点奇怪。我想 git 会按照提交的顺序重播提交/差异。作为健全性检查,我尝试了 git rebase 并将所有提交保留为“选择”,但我仍然遇到合并冲突。有人可以帮我理解这一点吗?谢谢!

标签: git

解决方案


假设我在分支上按时间顺序最新

git checkout F
git reset --soft A # move pointer of branch to A, do not change content, all differences will be in index
git commit -m "Squashed stuff" # now you have a single revision after A that has a tree exactly like F
git cherry-pick F..I # replay everything after the squashed revisions

现在你完成了。


推荐阅读