假设我们的版本位于不同的分支上。
我们使用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
推送到我们的“中央”回购
此外,如果有另一种工作流程替代方案对我们有用,我真的愿意接受建议。
答案 0 :(得分:1)
我认为最简单的方法是收到预期结果git cherry-pick
或git 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