GitHub fork 的项目怎么和原仓库同步

FreeGuideOnline 最新 2026-07-04

bash git clone https://github.com/你的用户名/仓库名.git cd 仓库名


### 2. 添加上游仓库(upstream)

只做一次,将原作者的仓库设置为远程上游源。

```bash
git remote add upstream https://github.com/原作者/仓库名.git

验证是否添加成功:

git remote -v

你应该看到类似输出:

origin    https://github.com/你的用户名/仓库名.git (fetch)
origin    https://github.com/你的用户名/仓库名.git (push)
upstream  https://github.com/原作者/仓库名.git (fetch)
upstream  https://github.com/原作者/仓库名.git (push)

3. 拉取上游仓库的最新提交

确保当前在你的主分支(假设为 main)上:

git checkout main

从上游仓库获取所有分支的更新:

git fetch upstream

4. 合并上游更新到本地分支

将上游的 main 分支合并到你当前的 main

git merge upstream/main

如果一切顺利,Git 会显示合并成功。若出现冲突,请参考下文“处理合并冲突”小节。

5. 推送更新到你的远程 Fork

git push origin main

现在你的 GitHub Fork 仓库就已经与原仓库同步完成。

处理合并冲突

当你在 Fork 中修改了原仓库也同时改动的同一文件时,merge 命令会提示冲突。解决方法:

  1. 打开冲突文件,找到 <<<<<<<=======>>>>>>> 标记,手动编辑保留想要的内容。
  2. 保存文件后,执行:
    git add .
    git commit -m "解决合并冲突"
    git push origin main
    

如果你希望用上游版本完全覆盖你本地的修改,可以执行:

git reset --hard upstream/main
git push origin main --force

警告--force 会丢失你在 Fork 上的所有提交,请确认后再使用。


最佳实践与常见问题

保持 Fork 干净的建议

  • 尽量在单独的特性分支上进行修改,主分支只用来同步上游,可以大幅减少合并冲突。
  • 定期同步(例如每周一次),避免代码差距过大。
  • 同步前先在本地创建一个备份分支:git branch backup-main,以便出错时恢复。

为什么网页端显示“Fetch upstream”灰色不可用?

  • 常见原因:你的 Fork 已经是最新的,或者当前分支不是默认分支。
  • 也可能上游仓库被删除或设为私有。
  • 换用命令行同步即可解决大部分情况。

如何只同步某个分支?

使用命令行时,你可以指定任意分支:

git fetch upstream 分支名
git merge upstream/分支名

如果本地还没有该分支,可先创建并切换:

git checkout -b 分支名 upstream/分支名