2

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

  • 掌握
  • v1
  • v2

我们使用 SVN 的工作流程是我们在 master 上进行错误修复,然后将它们合并到 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”推送到 master。

                      ---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

我发现cherry-pick 让我可以选择单个提交并在需要时重新应用它们。我认为 rebase 做了我想要的,但我迷失在 rebase 的论点中。

这是我认为它应该如何工作的方式:

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

  • rebase c+c1 提交到 v1 或 v2

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

此外,如果有其他适合我们的工作流程替代方案,我非常愿意接受建议。

4

1 回答 1

2

我认为获得预期结果的最简单方法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
于 2013-11-07T11:00:22.387 回答