我有一个带有提交 a1、a2、a3、a4 的测试分支。我想对主分支进行更改,但只在一次提交而不是四次提交。所以我做了:
git checkout master
git merge -Xtheirs test
git rebase -i a1
squash a4
squash a3
squash a2
pick a1
所以在主分支上,我得到了一个提交 b1,其中包括来自 a1、a2、a3、a4 的更改。第一次完成时,这很好用。然后我继续我的测试分支,添加提交 a5、a6、a7、a8。我签出 master 并再次合并 - 我必须解决奇怪的冲突,因为 a5 是 a4 的延续,因此也是 b1 的延续。请注意,git diff
在 a4 和 b1 上没有输出任何差异。然后我试图从 a5 变基,并且发生了更多的冲突。
所以看起来这git rebase
不是我需要的。加入提交后,git 将 a4 和 b1 视为具有不同历史的不同提交对象,更糟糕的是甚至在图中的不同位置。
我想要类似的东西:
b0 --- b0 | | a1 | | | a2 | | | a3 | | | a4 ---- b1 | | a5 | | | a6 | | | a7 | | | a8 ---- b2 | | a9 | | | ... --- b3
这甚至可能吗?
请注意,我可以为每组提交创建一个分支,即一个用于 a1、a2、a3、a4 的分支,然后与 master 进行合并和变基,并从 b1 为提交 a5、a6、a7、a8 创建另一个分支,然后执行与 master 合并和 rebase 以获得 b2 等等。但这不是我想要的——每天有一个分支是不可取的。我只想有两个分支——一个包含所有提交的测试分支和一个粒度更粗的主分支。这样当我推动主人时,他们就不会看到我所做的每一个小改动。