如何優雅的讓fork后的倉庫與原倉庫同步


https://github.com/selfteaching/the-craft-of-selfteaching/issues/67

http://www.qtcn.org/bbs/simple/?t53628.html

最常見的問題,當你fork了一個倉庫以后,原倉庫的代碼又被修改了,這時候能平台並不會幫你自動同步代碼到你fork以后的倉庫。這時候你提交代碼,提交合並請求時的版本就和原倉庫的不一致了。這時候有什么好的辦法解決問題呢?

最簡單粗暴地方法就是:

刪除自己的倉庫,重新fork一個倉庫

事先把自己修改的代碼保存好,然后刪掉fork的倉庫,接着重新fork一份原倉庫,這時候再把fork的倉庫克隆到本地,代碼修改以后再提交。

這可是大招哦,不能一上來就用了。要在最后實在沒辦法的情況下使用,我們還有更加優雅的辦法。另外說一下,如果原倉庫已經整合了很多合並代碼的請求,並且代碼和你的相差很大的情況下,建議使用這種簡單粗暴的方法,很省事。

接下來我們來講一下優雅的方式是什么樣子的,在此之前,你最好搞明白git pullgit merge的區別和聯系。


更新代碼並合並

  1. 進入本地倉庫的目錄
  2. 使用命令git remote -v查看遠程倉庫的地址,以及是否關聯原代碼倉庫
D:\Project\study>git remote -v
origin  https://github.com/fxiaoyu97/Study-Log.git (fetch)
origin  https://github.com/fxiaoyu97/Study-Log.git (push)

如上所示,如果只關聯了一個倉庫地址,表示還沒有關聯原倉庫地址,這時候我們需要設置一下,這個關聯設置一次就好。

  1. 添加原倉庫的關聯:git remote add upstream https://github.com/selfteaching/the-craft-of-selfteaching.git ,這樣就可以把原倉庫設置為你的upstream倉庫。命令執行后完全沒有任何返回信息,我們可以執行命令git remote -v查看一下。
D:\Project\study>git remote -v
origin  https://github.com/fxiaoyu97/study.git (fetch)
origin  https://github.com/fxiaoyu97/study.git (push)
upstream  https://github.com/calos/study.git (fetch)
upstream  https://github.com/calos/study.git (push)
  1. 執行命令git status檢查本地是否有未提交的修改,如果存在的話,先把未提交的修改從本地倉庫推送到自己的遠程倉庫,最后再執行git status檢查一下本地文件的狀態。
git add -A
git commit -m "提交說明"
git push origin master
git status

注意:這一步可以避免出現文本沖突的情況,但是如果你本地倉庫的修改不是很重要,建議還原的到未修改以前的樣子。

  1. 獲取原倉庫的更新內容:git fetch upstream
D:\Project\study>git fetch upstream
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), 608 bytes | 26.00 KiB/s, done.
From https://github.com/fxiaoyu97/study
   44a5a2d..8da9cb5  master     -> upstream/master
  1. 切換到master分支:git checkout master
  2. 合並原倉庫的內容到本地master分支:git merge upstream/master,如果遇到沖突就在本地解決沖突。
  3. 把本地倉庫的內容推送到自己的倉庫:git push

如果遠程原倉庫的歷史commit被修改整理過,而自己在沒有同步遠程原倉庫的情況下有新的PR需求請求,可以有兩個方案處理:

  1. fork最新的遠程倉庫,重新提交。
    1. 備份自己的改動
    2. 刪除自己的fork的倉庫,重新fork遠程原倉庫
    3. 將最新改動的應用到新fork的倉庫,然后提交PR
  2. 強制同步遠程主倉庫的所有提交,處理沖突,再次提交
    1. 備份自己的改動
    2. 添加遠程遠倉庫為自己本地倉庫的一個upstream,試用一下命令強制同步git fetch upstrem && git reset --hard upstrem/master && git clean -f -d
    3. 將自己的改動應用到強制同步過來的分支,如果使用的其他分支備份,可以使用rebase命令合並過來,如果有沖突,處理沖突
    4. 檢查自己的commit是否正確合理,無問題則可重新提交PR


免責聲明!

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



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