前言
场景描述: 本地已经有一个从A项目部分拷贝之后生成的新项目B, 并且已经开始开发了新功能, 而A项目也在进行迭代更新.这时产品说要同步A项目的功能到B项目, 两个项目都有了新的更新, 那怎么同步更新呢? 于是想到先fork然后同步, 这个过程有些曲折, 但问题总归是能解决。
一.fork旧项目
1.在A项目选择创建fork;
2.选择存放到个人仓库,配置新项目名称;
3.有个选项是勾选Enable fork syncing决定之后是否跟随更新。建议勾选。
4.点击确定之后就会进入到刚刚fork的仓库C里面了,接下来就可以关联到本地仓库了。
分析: 在项目B本地仓库关联刚刚fork的远程仓库C时, 会发现关联不上。原因是项目B已经有对应的远程仓库了。
这时可以有两个选择
1.再关联一个远程仓库,即fork的远程仓库C; 2.修改本地仓库B对应的远程仓库。
关联多个远程仓库
关联第一个远程仓库就不用多说了, 本文只讲已经存在默认的origin仓库时,如何关联远程仓库?
方法1:
1. git remote -v //查看远程仓库信息
2. git remote add originFork https://git.XXX.com/scm/qhlive/XXX.git(fork项目对应的仓库地址) //关联远程仓库originFork
复制代码
方法2:
如果是sourceTree, 在右上角找到“设置” - “远程仓库”, 可以添加/移除关联的远程仓库。
方法3:
再秀一点也可以直接编辑配置文件, 类似下面这样。 配置文件就是项目下的.git文件,也可以在sourceTree的设置中找到。
修改本地仓库对应的远程仓库
方法1:
git remote -v #查看远端地址
git remote #查看远端仓库名
git remote set-url origin https://git.XXX.com/xx/xx.git (新地址)
复制代码
方法2:重命名/删除
git remote rename origin old-origin
或
git remote rm origin
git remote add origin [url](新地址)
复制代码
方法3: 和上面一样,更改配置文件。
fork仓库如何与原仓库同步更新?
用一张图说明fork仓库与原仓库的关系
1.上游仓库更新到本地仓库
git fetch originFork //拉取所有更新的分支
git pull originFork branch_name (fork元仓库中存在的分支并与本地仓库分支对应)
复制代码
这时可能会存在报错:fatal: refusing to merge unrelated historie
这是因为两个分支没有取得关系。那么怎么解决呢? 在你操作命令后面加--allow-unrelated-histories
git pull originFork branch_name --allow-unrelated-histories
复制代码
tips: 如果是git merge 出现这个问题,也是在后面加-allow-unrelated-histories。
git merge originFork branch_name --allow-unrelated-histories
复制代码
2.更新到上游仓库
假设项目B的origin远程仓库和fork的远程仓库都有一个分支feature/XXX, 你在该分支上进行开发,将本地修改commit后,每次push前按下面步骤进行,即可实现与上游原仓库A进行同步更新。
- (1)同步源仓库的信息到本地
git remote update feature/XXX
复制代码
- (2)将源仓库的信息merge到本地分支:
git checkout feature/XXX
git rebase source_repository_name/feature/XXX
复制代码
- (3)git push 将最新同步的代码和修改,提交到你的origin仓库
- (4) 提出Push Request,将修改提交到项目A的远程仓库