Github進行fork后如何與原倉庫同步


實在是……有太多人同時在幫忙修訂錯別字或優化 xiaolai 的 the-craft-of-selfteaching 了。如果你提交的 pull request 未被接受且得到回復說:“重新fork”,其實是你遇到一個問題:

  • 在你 fork 之后, xiaolai 的倉庫又更新了;
  • 但 github 不會自動幫你把 xiaolai 的倉庫 同步給你 fork 后的倉庫;
  • 導致你提交 pull request 時的版本和 xiaolai 的版本不一致。

這個問題,用顯得更“專業點”的說法,叫做:Github進行fork后如何與原倉庫同步。那到底怎么做呢?

最省事的辦法可能是:

  • 在你fork的倉庫setting頁翻到最下方,然后delete這個倉庫;
  • 然后重新fork xiaolai 的倉庫,並 git clone 到你的本地。

有時候,你需要用到這個省事的辦法,比如 xiaolai 的倉庫再次整理了 commit 。但在更多情況下,刪掉自己fork的庫,應該是你的最后選擇,而不應該是首選。

和很多人一起向 xiaolai 提交 pull request,這實在是一個反復練習 merge (中文說法:合並,或版本合並)的機會。毫不誇張地講,版本管理是軟件工程極其重要的規范,也是極其基礎的必備技能。而 merge 則是版本管理中最必須也最常用的場景。

那要不然,就多練練?以下是傻瓜版操作步驟,還細心配了截圖,保管你從 0 也能上手。至於原理嘛,慢慢再搞懂吧。

merge前的設定

step 1、進入到本地倉庫的目錄。

下面所有操作,如無特別說明,都是在你的本地倉庫的目錄下操作。比如我的本地倉庫為/from-liujuanjuan-the-craft-of-selfteaching

image

step 2、執行命令 git remote -v 查看你的遠程倉庫的路徑:

image

如果只有上面2行,說明你未設置 upstream (中文叫:上游代碼庫)。一般情況下,設置好一次 upstream 后就無需重復設置。

step 3、執行命令 git remote add upstream https://github.com/selfteaching/the-craft-of-selfteaching.git 把 xiaolai 的倉庫設置為你的 upstream 。這個命令執行后,沒有任何返回信息;所以再次執行命令 git remote -v 檢查是否成功。

image

step 4、執行命令 git status 檢查本地是否有未提交的修改。如果有,則把你本地的有效修改,先從本地倉庫推送到你的github倉庫。最后再執行一次 git status 檢查本地已無未提交的修改。

git add -A 或者 git add filename
git commit -m "your note"
git push origin master
git status

注1:這一步作為新手,建議嚴格執行,是為了避免大量無效修改或文本沖突帶來的更復雜局面。

注2:如果你已經在fork后的倉庫提交了大量對 xiaolai 的倉庫並沒有價值的修改,那么想要pull request,還是重新回到本文最初的“最省事辦法”吧。

merge 的關鍵命令

以下操作緊接着上面的步驟。

step 5、執行命令 git fetch upstream 抓取 xiaolai 原倉庫的更新:

image

step 6、執行命令 git checkout master 切換到 master 分支:

image

step 7、執行命令 git merge upstream/master 合並遠程的master分支:

image

step 8、執行命令 git push 把本地倉庫向github倉庫(你fork到自己名下的倉庫)推送修改

如果擔心自己不小心改了哪里,可以再次執行命令 git status 檢查哪些文件有變化。這個操作僅是檢查,不會改變任何狀態,放心用。

image

現在你已經解決了fork的倉庫和原倉庫版本不一致的問題。可以放心向 xiaolai 發起 pull request 了。如果以上操作你花了不少時間,而 xiaolai 的倉庫 又恰好更新了。很好,一次新的練習機會來了……

補記:這份筆記最初整理於2019年3月。或許因為我平時git操作僅是簡單的修改新增,與其它倉庫協作少,於是這種上游倉庫的設置與同步相關指令需要用時,還是得搜到這篇筆記來看。那就發出來,或許也能幫到其他人吧~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM