如何将提交从一个分支复制到另一个分支

时间:2015-10-08 19:27:32

标签: git

我正在使用两个功能

共享 - 提交 - 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进行更新时,我不知道如何合并这些新的更改。

2 个答案:

答案 0 :(得分:9)

这里基本上有两种选择。

  1. 您可以使用cherry-pickfeat2上的新提交复制到combo
  2. 您可以merge
  3. 而不是变基

    樱桃采摘

    要选择feat2combo的新提交,请运行以下命令:

    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选项。