从一个分支到另一个分支进行Git rebase

14

我有以下案例:

                          K---L new-feature
                         /
                H---I---J dev-team1
               /
              E---F---G dev-main
             /
A---B---C---D master

我希望将dev-main分支中的new-feature(K---L)分支移动,而不包括dev-team1中的(H---I---J)

                H---I---J dev-team1
               /
              E---F---G---K---L dev-main
             /
A---B---C---D master
2个回答

14

git rebase 带有 --onto 参数,可以实现你所需的功能。

git checkout new-feature
git rebase --onto dev-main dev-team1

# Now new-feature has commits K' and L' after G in dev-main.
git checkout dev-main
git merge --ff-only new-feature

参见"git rebase"的文档页以获取更多详细信息。(我喜欢添加一个-i,以确保我正在移动我认为的提交。)

如果提交数量很少,您也可以使用git cherry-pick

git checkout dev-main
git cherry-pick K L

不要忘记,cherry-pick支持一系列的提交。 - onionjake

1

您可以挑选 K 和 L 提交。

git checkout dev-main
git cherry-pick K

如果您有冲突,请修复它们,然后执行。
git cherry-pick --continue
git cherry-pick L

解决冲突。

您还可以使用交互式变基。

git rebase -i head~5

在打开的编辑器中,用以下内容替换 H、I 和 J 提交行:
pick F
pick G

你可以在问题和答案中使用4个空格缩进来创建代码块。 - Maic López Sáenz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接