git教學 github教學 - 如何更新GitHub分叉存儲庫?
從2014年5月開始,可以直接從GitHub更新分支。 這仍然適用於2017年9月, 但它將導致臟的提交歷史。
- 在GitHub上打開你的fork。
- 單擊Pull Requests 。
- 單擊New Pull Request 。 默認情況下,GitHub會將原始文件與您的fork進行比較,如果您沒有進行任何更改,則不應該進行任何比較。
- 如果看到該鏈接,請單擊切換基礎 。 否則,手動將基礎分支下拉到您的分叉,並將分叉下移到上游。 現在GitHub會將你的分叉與原始分析進行比較,你應該看到所有最新的變化。
- 創建拉取請求並為拉取請求指定可預測的名稱(例如,
Update from original
)。 - 向下滾動到合併拉取請求 ,但不要點擊任何內容。
現在您有三個選項,但每個選項都會導致一個不太乾淨的提交歷史記錄。
- 默認情況下會創建一個醜陋的合併提交。
- 如果單擊下拉列表並選擇“Squash and merge”,則所有乾預提交將被壓縮為一個。 這通常是你不想要的。
- 如果單擊Rebase並合併 ,所有提交都將“與”你,原始PR將鏈接到您的PR,GitHub將顯示
This branch is X commits ahead, Y commits behind <original fork>
。
所以,是的,您可以使用GitHub Web UI保持您的repo更新其上游,但這樣做會玷污您的提交歷史記錄。 堅持命令行 - 這很容易。
我最近分叉了一個項目並應用了幾個修復程序。 然後我創建了一個拉取請求,然後被接受。
幾天后,另一位撰稿人做出了另一項改變。 所以我的fork不包含那個改變。
我怎樣才能把這個改變變成我的叉子? 當我進行進一步的更改時,是否需要刪除並重新創建我的分支? 或者是否有更新按鈕?
很多答案最終會在父存儲庫之前移動fork 一次提交 。 這個答案總結了here找到的步驟here它們將您的fork移動到與父級相同的提交 。
將目錄更改為本地存儲庫。
- 如果你不是
git checkout master
切換到master分支
- 如果你不是
將父級添加為遠程存儲庫,
git remote add upstream <repo-location>
-
git fetch upstream
發出git fetch upstream
發出
git rebase upstream/master
- 在此階段,您通過鍵入
git status
來檢查是否提交了要合併的內容
- 在此階段,您通過鍵入
發出
git push origin master
有關這些命令的更多信息,請參閱here 。
前言:您的fork是“origin”,您分叉的存儲庫是“上游”。
讓我們假設您已經使用以下命令將叉子克隆到計算機:
git clone git@github.com:your_name/project_name.git
cd project_name
如果給出了那麼你需要繼續這個順序:
將“upstream”添加到克隆的存儲庫(“origin”):
git remote add upstream git@github.com:original_author/project_name.git
從“上游”獲取提交(和分支):
git fetch upstream
切換到fork的“master”分支(“origin”):
git checkout master
存儲“主”分支的更改:
git stash
將“上游”的“主”分支中的更改合併到“原點”的“主”分支中:
git merge upstream/master
解決合併衝突(如果有)並提交合併
git commit -am "Merged from upstream"
將更改推送到fork
git push
取回你的藏匿變化(如果有的話)
git stash pop
你完成了! 恭喜!
GitHub還提供了有關此主題的說明: help.github.com/articles/syncing-a-fork
截至本答復發布之日,GitHub還沒有( 或者我不再說? )這個功能在網絡界面中。 但是,您可以要求support@github.com
添加您的投票。
與此同時,GitHub用戶bardiharborow已經創建了一個工具來做到這一點: https://upriver.github.io/ ://upriver.github.io/
來源在這裡: https://github.com/upriver/upriver.github.io : https://github.com/upriver/upriver.github.io
請按照以下步驟操作。 我嘗試了它們,它幫助了我。
結帳到您的分行
語法: git branch yourDevelopmentBranch
示例: git checkout master
拉源存儲庫分支以獲取最新代碼
語法: git pull https://github.com/tastejs/awesome-app-ideas master
示例: git pull https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git BRANCH_NAME
我用這一行更新了我的分叉回購:
git pull https://github.com/forkuser/forkedrepo.git branch
如果您不想將另一個遠程端點添加到項目中,請使用此方法,如此處發布的其他解決方案。
這取決於您的存儲庫的大小以及您如何分叉它。
如果它是一個非常大的存儲庫,您可能希望以特殊方式管理它(例如丟棄歷史記錄)。 基本上,您可以獲得當前版本和上游版本之間的差異,提交它們然後櫻桃回歸主人。
試試看這個 。 它描述瞭如何處理大型Git存儲庫以及如何使用最新更改來上游它們。