如何更新或同步GitHub上的分叉仓库

如何更新或同步GitHub上的分叉仓库

技术背景

在开源项目的开发过程中,fork是一个常见的操作。当你fork了一个项目后,原项目可能会继续有新的提交。为了使自己的分叉仓库与原仓库保持同步,就需要进行更新或同步操作。这可以让你获取原仓库的最新代码,同时保留自己的修改。

实现步骤

方法一:使用命令行

  1. 添加远程仓库:在本地克隆的分叉仓库中,将原GitHub仓库添加为“远程仓库”。
1
git remote add upstream https://github.com/whoever/whatever.git
  1. 获取远程分支:从上游仓库获取所有分支及其提交。
1
git fetch upstream
  1. 切换到主分支:确保你在主分支上。
1
git checkout main
  1. 合并或变基
    • 变基:如果你想让自己的提交在最新的上游提交之后,可以使用变基。
1
git rebase upstream/main
- **合并**:如果你不想重写主分支的历史(例如,其他人可能已经克隆了你的仓库),可以使用合并。
1
git merge upstream/main
  1. 推送到远程仓库:如果使用了变基,可能需要强制推送。
1
git push -f origin main

方法二:使用GitHub网页界面

  1. 打开你的分叉仓库。
  2. 点击“Pull Requests”。
  3. 点击“New Pull Request”。默认情况下,GitHub会比较原仓库和你的分叉仓库,如果没有做任何更改,应该没有可比较的内容。
  4. 如果看到“switching the base”链接,点击它;否则,手动将“base fork”下拉列表设置为你的分叉仓库,将“head fork”设置为上游仓库。现在GitHub会比较你的分叉仓库和原仓库,你应该能看到所有最新的更改。
  5. 创建拉取请求,并为拉取请求指定一个可预测的名称(例如,“Update from original”)。
  6. 滚动到“Merge pull request”,但先不要点击任何东西。
  7. 你有三个选项,但每个选项都会导致不太干净的提交历史:
    • 默认选项将创建一个丑陋的合并提交。
    • 如果你点击下拉列表并选择“Squash and merge”,所有中间提交将被压缩为一个。这通常不是你想要的。
    • 如果你点击“Rebase and merge”,所有提交将与你一起进行,原始的拉取请求将链接到你的拉取请求,GitHub将显示“此分支比 <原始分叉> 领先X个提交,落后Y个提交”。

方法三:使用GitHub CLI

1
gh repo sync owner/cli-fork

如果上游仓库的更改导致冲突,GitHub CLI无法同步。你可以设置-force标志来覆盖目标分支。

核心代码

命令行同步代码示例

1
2
3
4
5
6
7
8
9
10
# 添加远程仓库
git remote add upstream https://github.com/whoever/whatever.git
# 获取远程分支
git fetch upstream
# 切换到主分支
git checkout main
# 变基
git rebase upstream/main
# 强制推送
git push -f origin main

GitHub CLI同步代码示例

1
gh repo sync owner/cli-fork

最佳实践

  • 使用变基:为了使拉取请求尽可能干净,最好使用变基而不是合并。
  • 使用单独的分支:避免直接在主分支上工作,而是在单独的分支上进行开发,这样可以保持主分支的干净,便于未来的合并。
  • 定期同步:定期同步分叉仓库,以避免积累过多的更改,减少冲突的可能性。

常见问题

1. 为什么需要告诉Git原GitHub仓库的信息?

Git是一个分布式版本控制系统,与GitHub没有直接关联。当你在GitHub上创建分叉仓库并克隆它时,GitHub知道该仓库是一个分叉,但Git并不知情。因此,需要手动添加远程仓库信息。

2. 使用GitHub网页界面同步会导致提交历史混乱,如何解决?

建议使用命令行进行同步,因为命令行可以更好地控制提交历史,避免不必要的合并提交。

3. 同步后,GitHub上的分叉仓库仍然显示“落后X个提交”,怎么办?

同步操作只会更新本地仓库的副本,要更新GitHub上的分叉仓库,需要将本地的更改推送到GitHub。

1
git push origin main

如何更新或同步GitHub上的分叉仓库
https://119291.xyz/posts/2025-04-17.how-to-update-or-sync-a-forked-repository-on-github/
作者
ww
发布于
2025年4月17日
许可协议