前言
場景描述: 本地已經有一個從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的遠程倉庫