场景:
- 两个 Git 仓库, 仓库 A 和仓库 B,其中仓库 B 是从仓库 A 的某个点 Fork 出来的
- 经过一段时间两个仓库分别有一些新的改动,需要做同步
- 假定同步需求的单向的,从仓库 A 到仓库 B
1. 网页端通过 Merge Request 处理
华为云上代码仓库在 web 页面有”合并请求”标签页
在 Fork 出来的代码仓库里,通过新建合并请求,可选择往母仓库提交合并请求,如下图:
按流程操作后,有两种预期的结果:
- 一切正常,合并的代码没有冲突,可以直接+2 合入
- 有冲突,需要先解决冲突再合入,如果可以在页面端操作的简单错误,会有提示,当无法在页面处理,则需要采用下方的命令行方式处理
2. 命令行处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| # 进入目标工程:本例中为仓库B的工程 cd ${仓库B工程} # 查看当前远端仓库列表 git remote -v origin git@xxx1.git (fetch) origin git@xxx1.git (push)
# 添加repoA的远端仓库地址到本工程,命名为repoA git remote add repoA ${仓库A的git地址} # 会增加如下远端仓库 repoA git@xxx2.git (fetch) repoA git@xxx2.git (push)
# 拉取仓库A的远端分支到本地 git featch repoA # 新建本地分支,基于仓库A的dev分支 git checkout -b A_dev repoA/dev
# 执行合并,从A_dev到origin/dev git merge origin/dev
# 如有冲突,按如下方式解决 git status . # 根据列表提示,将有差异的文件,逐个打开处理掉冲突的地方后 git add . git commit -m '<fix><merge bug fix>'
# 推动到远端 git push origin A_dev
|
此时可以在页面端,本仓库(仓库 B)内的两个分支之间: A_dev –> dev 提一笔 merge request,因为刚才冲突已全部解决,所以可以很顺畅的完成合并动作。
完成的示意图: