我正在使用两个功能
共享 - 提交 - A - B - C Feat1
共享 - 提交 - D - E - F Feat2
问题是,为了测试Feat2我也确实需要Feat1,但我仍然希望它们作为单独的分支,因为它们是不同的。什么是对Feat2进行更改然后快速创建第三个分支的好方法,它们不需要每次都将其销毁。
共享 - 提交 - Feat1 - Feat2
我在做的是
git checkout feat2
git branch -b combo
git rebase -i feat1
但是当我对feat2进行更新时,我不知道如何合并这些新的更改。
答案 0 :(得分:9)
这里基本上有两种选择。
feat2
上的新提交复制到combo
。要选择feat2
到combo
的新提交,请运行以下命令:
git checkout combo
git cherry-pick <new commit> <new commit> <new commit>
或者,您可以合并而不是重新定位。例如。要创建组合:
git checkout -b combo feat1
git merge feat2
然后,要从feat2
“合并新的更改”,只需...
git merge feat2
同样,要合并feat1
上的新提交:
git merge feat1
答案 1 :(得分:4)
您可以合并而不是rebase。由于您的组合分支仅用于测试,因此您不必担心历史记录有点混乱。
那是:
git checkout feat2
git branch -b combo
git merge feat1
稍后,当您更新feat2:
时git checkout combo
git merge feat2
每当您对feat1或feat2进行更新时,请将其合并到组合中。
缺点是您必须合并两个分支中的所有提交。如果您不想要更改,则必须单独提交以删除组合分支中的更改。
您可以将附加提交从feat2重新绑定到组合。
假设您在feat2上添加了一些提交,然后将这些提交移动到组合:
git rebase --onto combo lastcommittoexcludeonfeat2 feat2
或者,在对feat2进行更改之前,请添加分支或标记,例如:
git checkout -b lastfeat2rebase
git checkout feat2
git commit ... # more commits here to feat2
git rebase --onto combo lastfeat2rebase feat2
请注意,一旦使用了rebase选项,就不能再使用merge选项了。如果您使用合并选项,您可以稍后决定使用rebase选项。