git如何更新到远程fork仓库?如何更换远程仓库地址?

 

前言

场景描述: 本地已经有一个从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的远程仓库

posted @ 2021-03-07 15:55  威武的大萝卜  阅读(958)  评论(0编辑  收藏  举报