git 问题求各位老哥解 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
miloooz
V2EX    git

git 问题求各位老哥解

  •  
  •   miloooz Apr 13, 2021 1961 views
    This topic created in 1843 days ago, the information mentioned may be changed or developed.

    有两个待开发功能 a 和 b,两个人 A 和 B, A 负责 a,B 负责 b 。

    a 开始和 b 都在 dev 分支开发,然后被指出 a 要单独用分支开发,然后第三人剥离了两个功能的代码,A 在本地开了新 test 分支继续开发 a后续也从 test 分支提交测试上线,B 继续在 dev 分支开发 b,A 在开发了一段时间后应该是又合了一版 dev 分支的代码,部分公共文件解冲突的时候应用的是 A 本地的代码( A 的本地代码是老版),A 现在已经把 a 提交到线上的 master 分支。现在 B 拉取线上 master 的代码,由于本来应该冲突的地方之前被 A 解了冲突并应用了 a 的代码,但实际上是要用 B 的新代码。现在 B 要怎么尽量保留 A 的代码,并且把 B 的代码 merge 进 master 呢。

    简述就是:部分文件应该用 B 的新的,但是 A 已经解冲突用了老的并推到了线上,现在 B merge master 分支,明明不一样的地方,但是因为 A 已经解过,所以直接就用了 A 的解决方案。现在 B 希望 merge master 分支到本地 dev 分支,有代码不同的地方 git 都能提示出来,解好后该谁要改就谁改。

    这种情况虽然都不想看到,但是发生了,只希望好好解决就好。希望看到的老哥能给个好的解。唉。

    5 replies    2021-04-14 09:48:36 +08:00
    christin
        1
    christin  
       Apr 13, 2021 via iPhone   1
    提供一个思路 没有任何实际操作经验
    B 拉 master 回退版本到 A 提交之前 把 dev merge 进 master 再提交上去 A 再拉取 merge
    miloooz
        2
    miloooz  
    OP
       Apr 13, 2021
    @christin 感觉有点问题。本来是 A 和 B 完成功能后的分支合并,master 只是一个结果分支,忽略掉 master 分支。A 在中途 merge B,假设当时 B 的 历史节点为 H1,也就意味 H1 之前的代码合并都按照 A 的来,等 ab 的功能都完成后 A 和 B 来 merge,发现 A 在 H1 节点有过合并,那 H1 之后的可能是要解冲突,但 H1 及之前的冲突点还是会按照 A 之前的解决吧。明天会试一下,谢谢解答。
    msg7086
        3
    msg7086  
       Apr 14, 2021 via Android   1
    首先要确定的是,dev 或 master 上是不是只包含 A 的代码,并且不包含 B 的代码?

    如果是,那说明现在的状态是正确的,B 需要 rebase 到 A 的成品上,然后自行处理冲突,然后再合并回主干。
    towry
        4
    towry  
       Apr 14, 2021
    不是此问题的解决方案。

    1. 我们是任何功能都要从 master 分支切出自己的分支。然后开发完后合到沙盒分支上测试。
    2. master 是禁止 push 的,即使你是最高权限的人。
    3. 任何分支切出后都需要在 gitlab 自建托管上建一个 merge request 。

    [1] 多个功能在一个分支上,这种还是尽量避免,即使需要两个功能在一起,也可以建个临时的分支用。
    [2] 的做法是为了防止任何人误 push 代码。
    [3] 的做法,1 是为了方便他人 review 代码,2 是为了追踪远程分支,只要分支合到 master,远程分支会自动删除,避免代码库里有很多分支,但是不清楚哪些分支在用还是已经合过或者弃用。3 是如果有人不小心将分支彻底删除了(本地删除+远程删除),但是因为在 gitlab 上有 merge request 记录,可以根据这个记录拿到 commit hash,进而可以恢复代码的。
    pkoukk
        5
    pkoukk  
       Apr 14, 2021   1
    master 回退回去,然后从 master 签出一个新分支,从 A 和 B 的分支 cherry pick,最后提交回 master
    不过问题在于如果 A 和 B 的 commit 粒度不大合理,搞起来就很难受
    About     Help     Advertise     Blog     API     FAQ     Solana     883 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 19:33 PVG 03:33 LAX 12:33 JFK 15:33
    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