Git自學(xué)成才——fork倉(cāng)庫(kù)保持同步

fork別人的項(xiàng)目到自己的repository,然后clone到本地進(jìn)行開(kāi)發(fā)。然后別人的項(xiàng)目也在繼續(xù)開(kāi)發(fā),本文主要說(shuō)明如何把fork的項(xiàng)目的新的提交同步到自己的倉(cāng)庫(kù)。

核心思想是利用多個(gè)遠(yuǎn)程倉(cāng)庫(kù)(remote repository)

先執(zhí)行完fork,然后到自己的倉(cāng)庫(kù)clone代碼下來(lái),以master分支為例

$ git branch 
* master

保持工作目錄是最新的并且是干凈的

$ git status 
On branch master 
Your branch is up to date with 'origin/master'. 

nothing to commit, working tree clean

接下來(lái),看一下遠(yuǎn)程倉(cāng)庫(kù)

$ git remote -v 
origin ssh://git@xxx/YOUR_REPO/my-android.git (fetch) 
origin ssh://git@xxx/YOUR_REPO/my-android.git (push)

此處origin別名對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)地指向的是自己的倉(cāng)庫(kù)(因?yàn)槭菑淖约旱膫}(cāng)庫(kù)clone的)

接下來(lái),我們要添加對(duì)于目標(biāo)倉(cāng)庫(kù)(別人的倉(cāng)庫(kù))的指向。

$ git remote add upstream ssh://git@xxx/UPSTREAM_REPO/my-android.git

然后再看一下遠(yuǎn)程倉(cāng)庫(kù)情況

$ git remote -v 
origin ssh://git@xxx/YOUR_REPO/my-android.git (fetch) 
origin ssh://git@xxx/YOUR_REPO/my-android.git (push) 
upstream ssh://git@xxx/UPSTREAM_REPO/my-android.git (fetch) 
upstream ssh://git@xxx/UPSTREAM_REPO/my-android.git (push)

已經(jīng)關(guān)聯(lián)了遠(yuǎn)程倉(cāng)庫(kù)了,使用sourcetree直觀的看一下?tīng)顟B(tài)

同步之前.png

從圖中看出,我fork之后,對(duì)方的倉(cāng)庫(kù)又有很多次提交,這時(shí)我的倉(cāng)庫(kù)里也有幾次提交,通過(guò)rebase來(lái)保持同步。

rebase upstream的master分支

$ git rebase upstream/master

然后就是普通rebase的操作,如果有沖突不知道怎么解決,請(qǐng)參考我的另一篇“Git自學(xué)成才——rebase完整版

完成rebase之后,看一下節(jié)點(diǎn)是OK的

完成rebase.png

接下來(lái)是要執(zhí)行push,如果直接push到自己的遠(yuǎn)程倉(cāng)庫(kù),是被拒絕的

$ git push origin master:master
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://git@xxx/YOUR_REPO/my-android.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

這時(shí)有兩種方法:一種是刪除遠(yuǎn)程分支,然后直接push;另一種是使用 git push --force 強(qiáng)制推送。

這里我選擇第二種強(qiáng)推的方式,第一種方式參見(jiàn)我的另一篇“Git自學(xué)成才——rebase完整版

$ git push -f origin master:master
Compressing objects: 100% (186/186), done.
Writing objects: 100% (281/281), 66.82 KiB | 11.14 MiB/s, done.
Total 281 (delta 126), reused 184 (delta 41)
remote: Resolving deltas: 100% (126/126), completed with 54 local objects.
To ssh://git@xxx/YOUR_REPO/my-android.git
 + 8aaa796...d298312 master -> master (forced update)

push成功,看一下sourcetree上面的狀態(tài)也是OK的。

完成push.png

至此,同步了別人倉(cāng)庫(kù)的最新提交,也保有了自己的提交。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 多種多樣的工作流使得在項(xiàng)目中實(shí)施Git時(shí)變得難以選擇。這份教程提供了一個(gè)出發(fā)點(diǎn),調(diào)查企業(yè)團(tuán)隊(duì)最常見(jiàn)的Git工作流。...
    JSErik閱讀 4,614評(píng)論 2 8
  • git 指南 git操作 本地操作 git add <file>暫存工作區(qū)的修改到暫存區(qū) git commit將暫...
    IrisZL閱讀 679評(píng)論 0 0
  • 查看、添加、提交、刪除、找回,重置修改文件 git help # 顯示command的help git sho...
    Swiftor閱讀 2,216評(píng)論 0 2
  • 1. GIT命令 git init在本地新建一個(gè)repo,進(jìn)入一個(gè)項(xiàng)目目錄,執(zhí)行g(shù)it init,會(huì)初始化一個(gè)re...
    江邊一蓑煙閱讀 903評(píng)論 0 0
  • 當(dāng)我慢慢將你忘卻 你也漸漸將我模糊 情已走遠(yuǎn) 話已隨風(fēng) 不再有牽掛 不再糾纏絲毫 各不相欠 淡淡的回憶里 只有淺淺...
    君酒濃閱讀 285評(píng)論 0 1

友情鏈接更多精彩內(nèi)容