Git上fork後的程式碼倉庫如何與原倉庫進行同步

z?YiF 發表於 2020-10-20

問題場景:最近公司專案組不允許個人在遠端倉庫建分支,要求每個人fork一個倉庫,以後就在自己fork的倉庫裡提交程式碼,通過pull request將程式碼合併到主倉庫。
這裡的問題在於,原來的主倉庫更新後自己fork的倉庫並不會自動同步,導致兩個倉庫的版本不一致。

1.複製專案到自己的倉庫

在原專案的地址,比如https://gitee.com/A/xxxx.git上,點選fork按鈕,即將專案複製到了自己的倉庫中,地址是https://gitee.com/B/xxxx.git

2.下載專案到本地

下載到本地的專案會有一個預設的遠端名origin,但這個遠端名並不指向A倉庫,而是指向自己fork的B倉庫,也就是說之後進行的pull、push操作都是在B倉庫上進行的。這個時候就需要將A、B兩個倉庫進行關聯了

3.關聯兩個倉庫

執行命令git remote -v 檢視遠端倉庫路徑,如果只返回了兩行結果,說明這時A、B兩個倉庫還未進行關聯

origin  https://gitee.com/B/xxxx.git (fetch)
origin  https://gitee.com/B/xxxx.git (push)

執行命令git remote add upstream https://gitee.com/A/xxxx.git將A倉庫設為B的上游程式碼庫,upstream的名稱可以隨便取,寫abc也可以,之後B就用upstream這個名字與A進行聯絡。再次檢視遠端倉庫路徑,檢查是否設定成功

upstream		https://gitee.com/A/xxxx.git (fetch)
upstream		https://gitee.com/A/xxxx.git (push)
origin  https://gitee.com/B/xxxx.git (fetch)
origin  https://gitee.com/B/xxxx.git (push)
4.拉取合併程式碼

執行命令git fetch upstream獲取A上的更新(此時並不會修改原生程式碼)。然後執行git merge upstream/master將程式碼合併到自己的master分支上。或者直接使用git pull upstream master命令。

5.push程式碼到fork的倉庫

通過之前的操作,只是將自己的本地庫和原來的遠端庫進行了同步,所以還需要將fork的倉庫也進行同步才行。git push origin master,將程式碼push到B倉庫,到這裡才算將程式碼全部同步。