Git 跨项目合并代码

Summary: Author: 张亚飞 | Read Time: 2 minute read | Published: 2023-03-30
Filed under Categories: LinuxTags: Note,

Git 如何跨项目合并代码

现在有两个项目

  • A: git@git.baijiashilian.com:LLL/brtc/beta-lowcode/rtc-manage.git
  • B: git@git.baijiashilian.com:LLL/brtc/lowcode/rtc-manage.git

需要将 B 项目的分支 config/vrtc_envs 合并到 A 项目的 master 分支,在 gitlab 上跨项目提交 merge_request 提示有冲突,但是看不出哪里有冲突,于是决定在本地合并代码解决冲突

先将 A 项目拉下来

git clone git@git.baijiashilian.com:LLL/brtc/beta-lowcode/rtc-manage.git rtc-manage-beta

获取远端需要合并的仓库A,我们将其命名为 target 仓库

rtc-manage-beta

git remote add target git@git.baijiashilian.com:LLL/brtc/lowcode/rtc-manage.git

B 项目拉取到本地

git fetch target

使用 git branch -a 显示分支列表,可以看到除了 remotes/origin/* 分支,还有 remotes/target/* 分支:

$ git branch -a
* master
  master-v2
  remotes/origin/HEAD -> origin/master
  remotes/origin/debug_login
  remotes/origin/dev-3_0
  remotes/origin/dev-v1_0
  remotes/origin/dev-v2_0
  remotes/origin/feeSet
  remotes/origin/fee_list
  remotes/origin/liubo/switch-env
  remotes/origin/master
  remotes/origin/master-v2
  remotes/origin/operate
  remotes/origin/permission
  remotes/origin/release
  remotes/origin/release-beta
  remotes/target/abc-test
  remotes/target/brtc/modes
  remotes/target/canary_changes
  remotes/target/config/vrtc_envs
  remotes/target/debug_login
  remotes/target/dev-3_0
  remotes/target/dev-v1_0
  remotes/target/dev-v2_0
  remotes/target/feeSet
  remotes/target/fee_list
  remotes/target/hl/switch-media-node
  remotes/target/hl/switch-media-node-new
  remotes/target/hl/test
  remotes/target/liubo/switch-env
  remotes/target/master
  remotes/target/new-publish
  remotes/target/operate
  remotes/target/permission
  remotes/target/release
  remotes/target/release-beta
  remotes/target/vrtc/envs

remotes/target/config/vrtc_envs 合并到 master,即可看到冲突:

$ git branch
* master
  master-v2
$ git merge remotes/target/config/vrtc_envs
Removing pages/账号配置项/queries/JSPartnerConfig-updateRTCCustomConfig.json
Removing pages/账号配置项/queries/JSPartnerConfig-updateRTCConfig.json
Removing pages/账号配置项/queries/JSPartnerConfig-setSaaSConfigValue.json
Removing pages/账号配置项/queries/JSPartnerConfig-loadRTCCustomConfig.json
Removing pages/账号配置项/queries/JSPartnerConfig-loadRTCConfig.json
Removing pages/账号配置项/queries/JSPartnerConfig-getPartnerConfig.json
Auto-merging pages/ReleaseVersion/canvas.json
CONFLICT (content): Merge conflict in pages/ReleaseVersion/canvas.json
Auto-merging application.json
Automatic merge failed; fix conflicts and then commit the result.

如何撤销 merge

一次某同事不小心操作失误将开发分支 zyf/v4 合并到 master 后并合并,又执行 Revert 将此次合并回滚,虽然代码是回滚了,但是导致了后面再重新合并 zyf/v4 后发现大量冲突。

2024-05-16 10:45:22 on Mac OS nu ❯ git log
commit aae9c797361e2145b0e072a84eb448ab4ea6c7a5 (HEAD -> master-2024-05-15, origin/master-2024-05-15)
Merge: 0f9f3e5b8 01e1fef42
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 06:05:33 2024 +0000

    Merge branch 'revert-0f9f3e5b' into 'master'

    Revert "Merge branch 'zyf/v4' into 'master'"

    See merge request power/zs-console!242

commit 01e1fef42ff17bde28573151de1e3f716133c301 (origin/revert-0f9f3e5b)
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 05:35:45 2024 +0000

    Revert "Merge branch 'zyf/v4' into 'master'"

    This reverts merge request !240

commit 0f9f3e5b8c0ca78813aa377e0511ad806f1f9dfc
Merge: 726c55185 958d01aa1
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 05:30:27 2024 +0000

    Merge branch 'zyf/v4' into 'master'

    Zyf/v4

    See merge request power/zs-console!240

commit 958d01aa1fe48a2b7dec3c6a986f13dffaddc339
Merge: d050067b8 726c55185
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 05:29:30 2024 +0000

    Merge branch 'master' into 'zyf/v4'

    # Conflicts:
    #   src/models/machine.go
    #   src/repositories/user/repository.go
    #   src/services/report/machine.go

commit d050067b8436d5e106f2a1686eba88e33e36b76c
Merge: 2f3df2c10 d6535c653
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 13:23:36 2024 +0800

    Merge branch 'zyf/v4' of git.aukoo.cn:power/zs-console into zyf/v4

commit 2f3df2c10be694b786e978faf5489e7ff81a701c
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 13:23:34 2024 +0800

    优惠卷列表

commit d6535c653fc78b131ccee200f08a00cc0957b81f

此时如果使用 reset 将提交 958d01aa1fe48a2b7dec3c6a986f13dffaddc339 回滚会发现只是没有这条合并记录,但是该分支的提交记录仍在,示例: 优惠卷列表

$ git reset 958d01aa1fe48a2b7dec3c6a986f13dffaddc339 --hard
$ git log
commit 958d01aa1fe48a2b7dec3c6a986f13dffaddc339
Merge: d050067b8 726c55185
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 05:29:30 2024 +0000

    Merge branch 'master' into 'zyf/v4'

    # Conflicts:
    #   src/models/machine.go
    #   src/repositories/user/repository.go
    #   src/services/report/machine.go

commit d050067b8436d5e106f2a1686eba88e33e36b76c
Merge: 2f3df2c10 d6535c653
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 13:23:36 2024 +0800

    Merge branch 'zyf/v4' of git.aukoo.cn:power/zs-console into zyf/v4

commit 2f3df2c10be694b786e978faf5489e7ff81a701c
Author: chenjia <10001@example.net>
Date:   Tue Apr 23 13:23:34 2024 +0800

    优惠卷列表

commit d6535c653fc78b131ccee200f08a00cc0957b81f

实际代码仍没有回滚。 此时应该执行 git reset HEAD~1git reset HEAD^ 将操作回滚到上一步,这样才能将合并记录关联分支的提交记录一并撤销。


Comments

Cor-Ethan, the beverage → www.iirii.com