我如何更新GitHub分叉庫?


Answers

從2014年5月開始,可以直接從GitHub更新分支。 這仍然適用於2017年9月, 它會導致骯髒的承諾歷史。

  1. 在GitHub上打開你的fork。
  2. 點擊Pull Requests
  3. 點擊New Pull Request 。 默認情況下,GitHub會將原始文件與您的分叉進行比較,如果您未做任何更改,則不應該有任何比較。
  4. 如果看到該鏈接,請點擊切換基地 。 否則,請手動將基叉分配到您的分叉,並將分叉頭移到上游。 現在GitHub會將您的分支與原始分支進行比較,並且您應該看到所有最新的更改。
  5. 創建拉取請求並為您的拉取請求分配一個可預測的名稱(例如, Update from original )。
  6. 向下滾動到合併請求 ,但不要點擊任何東西。

現在你有三個選項,但每個選項都會導致一個不太乾淨的提交歷史記錄。

  1. 默認會創建一個醜陋的合併提交。
  2. 如果你點擊下拉菜單並選擇“壁球和合併”,所有中間提交將被壓縮成一個。 這通常是你不想要的東西。
  3. 如果你點擊Rebase並合併 ,所有提交將與你“進行”,原始PR將鏈接到你的PR,並且GitHub將顯示This branch is X commits ahead, Y commits behind <original fork>

所以是的,你可以使用GitHub網絡用戶界面讓你的repo更新上游,但這樣做會玷污你的提交歷史。 堅持使用命令行 - 這很簡單。

Question

我最近分了一個項目並應用了幾個修補程序。 然後我創建了一個接受請求。

幾天后,另一個貢獻者又做了一次改變。 所以我的叉子沒有包含那個改變......我怎麼能把這個改變變成我的叉子?

當我進一步做出貢獻時,是否需要刪除並重新創建我的分支? 還是有更新按鈕?




Android Studio現在已經學會了使用GitHub fork存儲庫(您甚至不需要通過console命令添加“上游”遠程存儲庫)。

打開菜單VCSGit

並註意最後兩個彈出式菜單項:

  • 重新使用我的GitHub分叉

  • 創建合併請求

試試看。 我使用第一個同步我的本地存儲庫。 無論如何,在您單擊“重新分配我的GitHub分支”之後,可以在Android Studio中訪問父級遠程存儲庫(“上游”)的分支,並且您將可以輕鬆地使用它們。

(我使用Android Studio 3.0與“Git集成”和“GitHub”插件。)




前言:你的叉子是“原產地”,你從中分出的是“上游”。

假設您已經使用如下命令將叉已經克隆到您的計算機:

git clone git@github.com:your_name/project_name.git
cd project_name

如果這是給出的,那麼你需要繼續按照這個順序:

  1. 將“上游”添加到您的克隆存儲庫(“起源”):

    git remote add upstream git@github.com:original_author/project_name.git
    
  2. 從“上游”獲取提交(和分支):

    git fetch upstream
    
  3. 切換到fork的“主”分支(“origin”):

    git checkout master
    
  4. 隱藏您的“主”分支的變化:

    git stash
    
  5. 將來自“上游”的“主”分支的更改合併到您的“原點”的“主”分支中:

    git merge upstream/master
    
  6. 解決合併衝突(如果有)並提交合併

    git commit -am "Merged from upstream"
    
  7. 將更改推送到叉子

    git push
    
  8. 找回隱藏的變化(如果有的話)

    git stash pop
    
  9. 你完成了! 恭喜!

GitHub還提供了有關此主題的說明: help.github.com/articles/syncing-a-fork







如果像我一樣,你永遠不會直接向主人提交任何東西 ,你應該這樣做,你可以做以下事情。

從您的叉的本地克隆創建您的上游遠程。 你只需要這樣做一次:

git remote add upstream https://github.com/whoever/whatever.git

然後,無論何時您想跟上上游存儲庫主分支,您都需要:

git checkout master
git pull upstream master

假設你從未對主人做過任何事情,你應該已經完成了。 現在您可以將您的本地主人推送到您的遠程GitHub分支。 您也可以將您的開發分支重新綁定在當前最新的本地主服務器上。

因此,在初始上游設置和主結帳之後,您只需運行以下命令即可將主設備與上游進行同步: git pull upstream master




很多答案最終會在你的父倉庫之前移動你的分叉。 這個答案總結了在here找到的步驟,它將把你的fork移動到與父進程相同的提交

  1. 將目錄更改為您的本地存儲庫。

    • 如果您不是git checkout master切換到主分支
  2. 將父級添加為遠程存儲庫, git remote add upstream <repo-location>

  3. 發出git fetch upstream
  4. 發出git rebase upstream/master

    • 在這個階段,你通過輸入git status來檢查提交的內容
  5. 發出git push origin master

有關這些命令的更多信息,請參閱here




當你克隆你的分叉庫時,進入你的克隆所在的目錄路徑和你的Git Bash Terminal中的幾行。

$ cd project-name

$ git remote add upstream https://github.com/user-name/project-name.git
 # Adding the upstream -> the main repo with which you wanna sync

$ git remote -v # you will see the upstream here 

$ git checkout master # see if you are already on master branch

$ git fetch upstream

在那裡你很好走。 主存儲庫中的所有更新更改都將被推送到您的fork存儲庫中。

“獲取”命令對於在項目中保持最新狀態是不可或缺的:只有在執行“git fetch”時,才會通知您的同事推送到遠程服務器的更改。

你仍然可以訪問here進一步查詢




我用這一行更新我的分叉回購:

git pull https://github.com/forkuser/forkedrepo.git branch

如果您不想將其他遠程終端添加到您的項目中,請使用此選項,因為此處發布了其他解決方案。




Links



Tags

git git   github