git 问题求各位老哥解

zmlq7 1月前 21

有两个待开发功能 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)
  • christin 24天前
    引用 2
    提供一个思路 没有任何实际操作经验
    B 拉 master 回退版本到 A 提交之前 把 dev merge 进 master 再提交上去 A 再拉取 merge
  • 楼主 zmlq7 24天前
    引用 3
    @christin 感觉有点问题。本来是 A 和 B 完成功能后的分支合并,master 只是一个结果分支,忽略掉 master 分支。A 在中途 merge B,假设当时 B 的 历史节点为 H1,也就意味 H1 之前的代码合并都按照 A 的来,等 ab 的功能都完成后 A 和 B 来 merge,发现 A 在 H1 节点有过合并,那 H1 之后的可能是要解冲突,但 H1 及之前的冲突点还是会按照 A 之前的解决吧。明天会试一下,谢谢解答。
  • msg7086 24天前
    引用 4
    首先要确定的是,dev 或 master 上是不是只包含 A 的代码,并且不包含 B 的代码?

    如果是,那说明现在的状态是正确的,B 需要 rebase 到 A 的成品上,然后自行处理冲突,然后再合并回主干。
  • towry 24天前
    引用 5
  • pkoukk 24天前
    引用 6
    master 回退回去,然后从 master 签出一个新分支,从 A 和 B 的分支 cherry pick,最后提交回 master
    不过问题在于如果 A 和 B 的 commit 粒度不大合理,搞起来就很难受
  • 游客
    7
返回