git - 樱桃选择 merge

标签 git version-control

假设分支 B 是分支 A 的主题分支,而您希望在分支 C 中进行这些更改。当您挑选分支 A 和分支 B 的 merge 提交到分支 C 时,这意味着什么?

例如,如果您使用 -m 标志指定分支 A 的旧 HEAD 以挑选 merge 到分支 C,这是否仅仅意味着“在挑选的提交树和旧 HEAD 之间进行比较”分支 A 应用到分支 C?”

使用这种方法有什么陷阱吗? (例如,分支 C 看起来像是 merge 到分支 A 和 B 吗?是否会应用更多的更改,而不仅仅是来自分​​支 B 的提交?)

最佳答案

我通常这样做的方式是使用 git rebase :

git rebase --onto C A B

这会获取 A 和 B 之间的差异,并将这些差异应用到分支 C。作为奖励,rebase 将跳过 A 和 B 之间执行与分支 C 中已存在的相同文本更改的任何提交。

更新:对于您在评论中提到的情况,请记住 Git 永远不会覆盖过去的历史记录。因此,即使在执行上面的 rebase 之后,您也可以在 rebase 之前 B 曾经所在的提交处重新创建一个新的分支头。不幸的是,我在早上的这个时候想不出一个简单的方法来做到这一点。抱歉,我帮不上什么忙,也许其他人会想出一个简单的方法!

关于git - 樱桃选择 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/232771/

相关文章:

git - Jenkins:如果只更改 README,就不要构建

Git 将 origin/master 中的所有提交压缩为 origin/master 中的单个提交

git - 不要忽略 git sourcetree 中的文件

git - 是否可以在 Visual Studio Online 中生成图表以显示编码人员的贡献?

ios - 在 Git 推送和克隆后,找不到 -lCocoaAsyncSocket XCode 7.3 的错误库

git - diff 在现有函数内部而不是之后添加新函数

git - 断电损坏的 git 文件后如何检索重要的 git 信息?

混帐针导入 : how to make one master branch?

git-checkout 以新名称检查文件的旧版本

linux - 在没有推送访问权限的情况下同步两个 git 克隆