如何同步 Fork 倉庫的上游分支並合併到自己的工作分支(含一鍵指令)

| Github | 3 Reads

在 GitHub 上貢獻開源專案時,常常需要 Fork 原始倉庫來開發自己的功能,然後提交 Pull Request。不過,在你開發的同時,原作者也可能在持續更新原始分支。

這時就會遇到一個常見問題:

✅「我要怎麼把原作者的最新更新同步到我自己的功能分支中?」

本篇將以具體範例教學,讓你用一組命令就能完成同步與合併!


🧭 假設情境

我們假設你現在的開發情境如下:

  • ✅ 你 Fork 了一個開源專案(稱為 origin

  • ✅ 上游原作者的倉庫(稱為 upstream)有一個分支叫 original_branch

  • ✅ 你自己在 Fork 倉庫中建立了一個功能開發分支 my_feature_branch

  • ✅ 你想要:

    • 把原作者的 original_branch 更新拉下來

    • 把這些更新套用到你的 my_feature_branch


🔧 前置設定(只需做一次)

如果你還沒設定過 upstream(上游倉庫來源):

git remote add upstream https://github.com/原作者帳號/專案名.git

確認一下遠端設定是否正確:

git remote -v

🛠 一鍵完成的同步與合併命令

這是一組可以直接在終端機執行的命令,能完成所有更新動作:

# 1. 取得 upstream 的更新(原作者的倉庫)
git fetch upstream

# 2. 更新本地的 original_branch 分支為 upstream 的最新狀態
git checkout original_branch
git reset --hard upstream/original_branch
git push origin original_branch --force

# 3. 回到你的功能開發分支
git checkout my_feature_branch

# 4. 合併剛剛更新好的 original_branch 到你的工作分支
git merge original_branch

# 5. 將合併後的分支推送到 GitHub(如有需要)
git push origin my_feature_branch

📌 執行結果

分支名稱 描述
original_branch 與上游 upstream 完全一致,用來作為同步來源
my_feature_branch 含有你的功能開發內容,也合併了 upstream 的更新

這樣一來,你就不會錯過原作者的 bug 修正或新功能更新,能保持與上游專案的最佳同步狀態。


💡 補充:rebase 替代 merge(進階用法)

如果你希望讓 commit 歷史更整齊,也可以考慮用 rebase 取代 merge

git checkout my_feature_branch
git rebase original_branch

但請注意:rebase 比較容易產生衝突,建議你先熟悉 merge 方式。


✅ 總結

這篇文章介紹了一套標準流程,用於同步 GitHub Fork 倉庫的上游內容,並且合併到自己開發中的分支。這能大幅降低未來合併衝突的機會,並讓你在開發時始終保持與上游一致。


如果你有更多 Git 工作流上的問題,歡迎留言交流,或關注本部落格獲得更多實戰技巧 👨‍💻


需要我幫你加上語法高亮的 Markdown 格式,或支援 Hugo / Hexo / Zola 等框架的 frontmatter 嗎?我可以直接幫你補上!

This article was last edited at