avatar

目录
git合并不同仓库的分支代码

需求背景

当一个代码仓库A因为业务需求,在一个时间节点复制出另一个代码仓库B,并且之后开始各自维护更新代码。在某个时候A仓库的某分支需要同步仓库B某分支的代码修改,这时候就可以按照下面介绍的步骤来实现代码的同步。

Ps: 两个仓库需要有一个提交节点代码是相同的


示例仓库

下面以工作中的两个仓库为例

  1. pony-A仓库

    bash
    1
    2
    3
    4
    5
    $ git remote show origin
    * remote origin
    Fetch URL: https://code.gitlab.cn/frontend/middle-platform/pony-A.git
    Push URL: https://code.gitlab.cn/frontend/middle-platform//pony-A.git
    ...
  2. pony-B仓库

    bash
    1
    2
    3
    4
    5
    $ git remote show origin
    * remote origin
    Fetch URL: https://code.gitlab.cn/frontend/middle-platform/pony-B.git
    Push URL: https://code.gitlab.cn/frontend/middle-platform/pony-B.git
    ...

现在需要将pony-B develop分支的代码同步到pony-A develop分支上


分支合并的方式(merge / rebase)

  1. 在A仓库本地添加一下B仓库的远程仓库

    /pony-A

    bash
    1
    2
    3
    4
    5
    6
    git remote add pony-B https://code.gitlab.cn/frontend/middle-platform/pony-B.git

    <!-- 查看远程仓库源 -->
    git remote show
    origin
    pony-B
  2. 拉取pony-B远程仓库代码到pony-A本地

    /pony-A

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    git fetch pony-B

    <!-- 查看本地所有分支 -->
    git branch -a
    * develop
    remotes/pony-B/develop
    remotes/pony-B/master
    remotes/origin/HEAD -> origin/develop
    remotes/origin/develop
    remotes/origin/master
  3. 合并分支代码(merge或rebase的方式, 这里以merge的方式为例)

    /pony-A

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!-- a. 新建一个分支用来做代码同步操作,保证原分支不受影响 -->
    git checkout -b mergeBranch

    <!-- b. 合并pony-B develop分支代码 -->
    git merge pony-B/develop

    <!-- c. 如果有冲突,需先解决冲突,然后再次提交;如果没有冲突,则直接到下一步 -->
    git add .
    git commit -m "feat(module): add new feat on pony-B develop"

    <!-- d. 如果确认合并完成没有问题,则将代码合入develop分支 -->
    git checkout develop
    git merge mergeBranch


cherry-pick的方式

如果你只需要同步部分代码变动(某几个提交),这时可以采用 Cherry pick。

  1. 在A仓库本地添加一下B仓库的远程仓库

    /pony-A

    bash
    1
    2
    3
    4
    5
    6
    git remote add pony-B https://code.gitlab.cn/frontend/middle-platform/pony-B.git

    <!-- 查看远程仓库源 -->
    git remote show
    origin
    pony-B
  2. 拉取pony-B远程仓库代码到pony-A本地

    /pony-A

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    git fetch pony-B

    <!-- 查看本地所有分支 -->
    git branch -a
    * develop
    remotes/pony-B/develop
    remotes/pony-B/master
    remotes/origin/HEAD -> origin/develop
    remotes/origin/develop
    remotes/origin/master
  3. 同步相关commit的代码

    /pony-A

    bash
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <!-- a. 新建一个分支用来做代码同步操作,保证原分支不受影响 -->
    git checkout -b mergeBranch

    <!-- b. 查看pony-B/develop的提交记录,获取需要同步的commit hash,然后同步某个commit的代码(以最近一个记录为例) -->
    git log pony-B/develop --oneline
    a8100b8 add something a
    379df9f add something b
    1d0bd0e add something c
    5bdaf55 add something d
    e3b17f6 add something e
    f54bd4e add something f
    0b93794 add something g
    3f588d2 add something h

    git cherry-pick a8100b8

    <!-- c. 如果有冲突,需先解决冲突,然后再次提交;如果没有冲突,则直接到下一步 -->
    git add .
    git cherry-pick --continue

    <!-- d. 如果确认合并完成没有问题,则将代码合入develop分支 -->
    git checkout develop
    git merge mergeBranch


文章作者: 盛顺炎
文章链接: https://www.shengshunyan.xyz/2020/07/07/git%E5%90%88%E5%B9%B6%E4%B8%8D%E5%90%8C%E4%BB%93%E5%BA%93%E7%9A%84%E5%88%86%E6%94%AF%E4%BB%A3%E7%A0%81/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 果实的技术分享
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论