繁体   English   中英

GIT:我如何从一个分支到另一个分支进行部分合并?

[英]GIT: how do i do a partial merge from one branch to another one?

我在一个分支上提交了ABCD,并希望将ABC合并到另一个分支上。

我知道你可以一个接一个地执行git cherry-pick,我的问题是我是否可以将这些提交组合在一起并希望能够进行壁球。

专制组织所说, git rebase可能就是你想要的。

一个例子:

假设您有ABCD并希望将ABC合并到Y 创建C的克隆并将克隆重新克隆到Y

git checkout -b C_copy C
git rebase --onto Y A~1 C_copy  # <= --onto [target] [source] [what]

检查一切是否顺利,并在必要时解决冲突。

现在你已经在Y之上安装了C_copy ,如下所示: Y-[A_copy]-[B-copy]-C_copy

您可以使用交互式rebase编辑它,例如C_copy它(假设您仍在C_copy ):

git rebase -i HEAD~3

如果出现问题,你可以扔掉C_copy因为它不会影响C

现在你可以快进YC_copy或使用git merge --no-ff合并它(如果你愿意,指定--no-commit来编辑你的提交):

git checkout Y
git merge --no-ff [--no-commit] C_copy

不应该git checkout branch-to-merge-on; git merge tag-or-sha1-of-commit-c git checkout branch-to-merge-on; git merge tag-or-sha1-of-commit-c工作?

以下是我所期望的:

git init
touch init; git add init; git commit -m 'init'
git checkout -b abcd
touch a; git add a; git commit -m 'a'
touch b; git add b; git commit -m 'b'
touch c; git add c; git commit -m 'c'; git tag commit-c
touch d; git add d; git commit -m 'd'
git checkout master
touch e; git add e; git commit -m 'e'
git merge commit-c

导致

init -- e -- merged   <- (master)
 \           /   
  a -- b -- c -- d    <- (abcd)

这会在c之前合并所有内容 (在这种情况下直到共同的祖先(init)),但看起来这就是你想要做的事情。 如果没有,那么在其他地方git rebase ing abcd可能是合适的。

最简单的是

git branch featureX C
git checkout branch_to_merge_to
git merge featureX

如果要--squash ,可以选择将--squash添加到merge命令。

这假设A的父级是合并基础。 如果不是,那么你就没有合并。

希望这可以帮助。

wnoise的解决方案看起来更好,并且可以与git rebase结合使用以完成。

init -- e --  a -- b -- c (merged)   <- (master)
  \                    /
   \             -----
    \           /   
     a -- b -- c -- d    <- (abcd)

如果您不想在主人身上使用'a',那么您可以更轻松地使用rebase:

git rebase -i init

并丢弃不需要的提交

init -- e -- b -- c (merged)   <- (master)

关于这个的最好方法是使用git rebase -i 如果您想保留历史记录,可以使用新分支执行此操作。 您还可以重新绑定到现有基础并使用交互式会话来压缩或跳过提交,然后合并,如果您希望它显示为合并而不是直接提交。

你可以做git cherry-pick --no-commit ABC然后做提交。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM