从 main 分支先拉出了 A 项目分支,没有同步回 main, 后面又拉了 B 分支,需要同步 A 项目代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
div class="sep20">
E0421
V2EX    git

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

  •  
  •   E0421 2023-07-11 10:30:23 +08:00 2589 次点击
    这是一个创建于 890 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前我们是手动比对,不知道大佬们有没有更方便的工具或者思路

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

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

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

    总体感觉这项目的 git 管理有段乱
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4291 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 10:07 PVG 18:07 LAX 02:07 JFK 05:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86