Git:将分支的一部分复制到另一个分支

时间:2013-11-07 09:08:35

标签: git svn version-control branch rebase

假设我们的版本位于不同的分支上。

  • V1
  • V2

我们使用SVN的工作流程是我们在master上进行了bug修复,然后将它们合并到v1和v2中,新功能应该等到下一个版本(v3)创建。

这是SVN转换为GIT转换的方式

                      ---v2----v2----v2
                     /
M----M----M----M----M----M----M----M----M----M
\
 v1----v1----v1----v1---v1---v1

M是master,v1和v2是版本分支。

现在让我们说有人会在主人身上推送提交“c”和“c1”。

                      ---v2----v2----v2                c1---c1---c1
                     /                                /            \
M----M----M----M----M----M----M----M----M----M---c---c---c---c---c--c
\
 v1----v1----v1----v1---v1---v1

如何将包含“c”和“c1”的分支部分复制到v1中?

预期结果:

                      ---v2----v2----v2                c1---c1---c1
                     /                                /            \
M----M----M----M----M----M----M----M----M----M---c---c---c---c---c--c
\                                        c1---c1---c1
 \                                      /            \
  v1----v1----v1----v1---v1---v1---c---c---c---c---c--c

我发现樱桃选择让我选择单一提交并随时重新应用它们。我认为rebase做了我想要的,但我在rebase的论点中迷失了。

这是他认为它应该如何运作的方式:

  • 将所有内容拉到本地仓库

  • rebase c + c1提交到v1或v2

  • 推送到我们的“中央”回购

此外,如果有另一种工作流程替代方案对我们有用,我真的愿意接受建议。

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是收到预期结果git cherry-pickgit format-patch

# cherry-pick example
git checkout v1
git cherry-pick c
git cherry-pick c1
...

# patch example
git checkout master
git format-patch HEAD~3
git checkout v1 && git am *.patch

使用rebase,您无法得到期望的结果:

                      ---v2----v2----v2                c1---c1---c1
                     /                                /            \
M----M----M----M----M----M----M----M----M----M---c---c---c---c---c--c
^                                                                    \
your current v1 base                                                  \
                                                                       v1----v1----v1----v1---v1---v1
                                                                    ^
                                                                    v1 base after rebase