从 main 分支先拉出了 A 项目分支,没有同步回 main, 后面又拉了 B 分支,需要同步 A 项目代码

302 天前
 E0421
目前我们是手动比对,不知道大佬们有没有更方便的工具或者思路

补充以下几点,标题没说清的
1.A 和 B 拉分支的时间是不一样的,所以 main 分支的内容也有所不同
2.A 分支的代码因为是项目客制化代码,所以没有同步回 main 分支,B 项目需要用到部分代码(不是全部代码)
1593 次点击
所在节点    git
12 条回复
XiLingHost
302 天前
试试 cherry-pick 吧
xiaoxuxu
302 天前
这种只能 cherry-pick 然后手工解决冲突了。如果还想再合并回 main 可以先 merge 或者 rebase main
E0421
302 天前
@XiLingHost @xiaoxuxu 谢谢回复。。忘了补充 因为我们提交合并请求里带有 excel 这种文件。。好像 cherry-pick 不过去
fanyer
302 天前
checkout from A, rebase main, pick B
wellhome
302 天前
```
git checkout B
git rebase A
```
rebase 把 B 的工作基于 A 的基础之上。
virualv
302 天前
在 A 分支找到需要的提交,把这些提交按顺序 cherry-pick 到 B 分支
E0421
302 天前
@fanyer @wellhome 谢谢哈 我试试 rebase 的命令
@virualv 谢谢 但是 cherry-pick 用不了这个场景
aqw012
302 天前
首先,A 分支里面的功能很难通过 cheery-pick 处理。大概率 commit 并不是按照单一功能来提交的,并且后续的 bug 修复也会产生非常多的 commit 。所以 cherry-pick 这条路走不通。同理 rebase ,merge 之类的也很难

我建议是如果 A 里面的功能是对 main 的架构完善和补充,可以整理出来这部分代码合回到 main 中
如果只是特定功能或者业务逻辑处理,并且除了 B 难以再复用,那就直接用现在的方案,拷贝过来对比看
如果是通用业务逻辑,可以基于 main 拉取一个分支 C ,再将 A 中代码沉淀到此分支。B 分支再 rebase C
mingsi
302 天前
支持 8 楼的建议,另外我觉得你们的问题是软件架构层次框架没有做好,本该分离的东西耦合在一起,版本控制工具解决不了软件架构的问题。
unco020511
302 天前
B 要用 A 的部分代码,那当然是 cherry-pick
LunarG
302 天前
要我就把 A 分支整理一遍,至少把 commit 分为前面是通用代码,后面是客制化内容,通用代码部分合入主干,之后 B rebase 主干从这里拉出来。如果通用部分合不了主干,至少也能从这里拉出 B 分支
harrozze
302 天前
@unco020511 #10 cherry-pick 是对完整 commit pick ,不能对其中每个 commit 的每个文件的多处修改单独 pick 。

还可以 git diff main > patch 以后,单独给 B 打 patch 。excel 文件那种就只能 git checkout A
-- xx.exml 然后再 git add 了。

总体感觉这项目的 git 管理有段乱

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

https://www.v2ex.com/t/955729

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

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

© 2021 V2EX