请教各位关于 Git 合并的问题

72 天前
 suikaChen
现在我手头上有一个项目,A 和 B 两个分支,两者都是从 2.0 版本分支衍生出于的,也就是处于同一起点。
两个分支后续独立开发迭代,两者的需求代码最多 10%的相似度。
经过半年的开发之后,现在两者相差 200+个 commit ,500+个更改。

现在产品有需求,需要以 A 分支为基底,将 B 分支的所有内容合入,保证最终分支包含 AB 分支的所有更改。
目前想过分版本合并、以 commit 为单位合并、merge 直接合并、rebase 合并,感觉都不太好,没办法保证最终的合并结果。
各位有没有什么比较好的合并方式?
3310 次点击
所在节点    git
47 条回复
calvinHxx
72 天前
@kk2syc 哈哈哈哈 好形象的比喻
suikaChen
72 天前
@kk2syc 合理哈哈哈哈。
suikaChen
72 天前
目前看下来还是手动按需求来合并比较靠谱一些。
只是 commit 记录就只能放弃了。
suikaChen
72 天前
@follower 我也是觉得头皮发麻才放弃。
luckyrayyy
72 天前
差别太大的话,感觉通过 commit 维度或者文件维度都很难操作,不如对照着功能点和代码进行重写逻辑了...能用的代码人工复制过来
suikaChen
72 天前
@suikaChen 应该说按需求手动重写,然后复用代码。
suikaChen
72 天前
@luckyrayyy 是的,目前看下来只有这种方案风险比较低,可操作性也还可以。
TONYXUELI
72 天前
从 A 分支拉一个新分支 C;
先试试将 B merge to C,如果冲突太多密密麻麻头疼就取消;
然后 试试 cherry 命令,根据提交记录慢慢合;
lanmiao
72 天前
“相差 200+个 commit ,500+个更改” 其实也没多少代码。
只要不是让你明天上线,那直接把 B 到 mergeA 或拉个 C 分支再合并都行,然后该改的改,该屏蔽的屏蔽,调通代码转测试就行了。
red666
72 天前
能不能不合并
dadhexd123
72 天前
哪个公司,避雷一下
lovelylain
72 天前
merge ,差异太大就别想着 rebase 和 cherry pick 了
oneisall8955
72 天前
clone 下来试试,A ,B 分支都先各自切出来为 A1 ,B1 分支作为演练。A1 分支在 2.0 后 rebase /squash 合并下成一次提交,B2 也同样操作。这时候 A1 和 B1 只相差一次提交,文件会差异很大,B1 试试直接 merge 过去 A1 ,解决冲突。
gzyguy
72 天前
A 、B 分支选一个代码变更基于 2.0 版本较少的分支,提一个 Pull Request 到 2.0 分支。这时候可以看到 file changes ,然后按文件修改记录挨个的塞到另一个分支上。
apuslilie
72 天前
类似这种需求是不是比较适合人工智能来搞,毕竟代码已经有了,只是一点一点的迁移过去。
forcecharlie
72 天前
我建议可以使用 git reset 把 200 多个 commit 搞成一个,再去解决冲突进行合并,这个实际上和普通合并是一样的,只是能简化合并(比如分支有反复合并的情况等等),当然都需要解决冲突。

当然还有 cherry-pick 这样的机制,还有 diff patch 这样的机制。甚至手动 copy 目录/文件
ooee2016
72 天前
200+的 commit ,那只有武力解决了,谁打输了谁负责合并解决冲突
fawkes
72 天前
最理想的方式就是手动合并,没有捷径
minami
72 天前
建议使用 Linus 合并法,
-->在 2002 年以前,世界各地的志愿者把源代码文件通过 diff 的方式发给 Linus ,然后由 Linus 本人通过手工方式合并代码
suikaChen
72 天前
刚刚尝试 merge 了一下,自动合并了 122 个文件,有 37 个文件有冲突。
冲突的文件数量看起来还可以。
打算以 A 分支 为基底,将这 37 个文件手动合并,提交一个 commit ,提完之后再 merge B 分支一遍,保证合并到所有代码并且没有冲突。

兄弟们觉得怎么样?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1121586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX