协慌网

登录 贡献 社区

将原始 GitHub 存储库中的新更新拉入分叉的 GitHub 存储库中

我在 GitHub 上分叉了某人的存储库,并希望使用在原始存储库中进行的提交和更新来更新我的版本。这些是我分叉副本后制作的。

如何提取原产地所做的更改并将其合并到我的存储库中?

答案

您必须将原始存储库(您分叉的存储库)添加为远程存储库。

关于分叉存储库的 GitHub 文档中:

GitHub旧界面的屏幕截图,“ Fork”按钮周围有一个矩形镜头

克隆完成后,您的存储库将具有一个名为 “ origin ” 的远程文件,该文件指向您在 GitHub 上的 fork。
不要让名称混淆您,这并不指向您从中分叉的原始存储库。为了帮助您跟踪该存储库,我们将添加另一个名为 “上游” 的远程服务器:

$ cd PROJECT_NAME
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
$ git fetch upstream

# then: (like "git pull" which is fetch + merge)
$ git merge upstream/master master

# or, better, replay your local work on top of the fetched branch
# like a "git pull --rebase"
$ git rebase upstream/master

还有一个命令行工具( hub ),可以简化上述操作

这是它如何工作的视觉效果:

执行命令后的结果流程图

另请参见 “ Git 分支实际上是 Git 克隆吗? ”。

除了 VonC 的答案外,您还可以根据自己的喜好对它进行调整。

从远程分支获取后,您仍然必须合并提交。我会取代

$ git fetch upstream

$ git pull upstream master

因为 git pull 本质上是 git fetch + git merge。

用:

git remote add upstream ORIGINAL_REPOSITORY_URL

这会将您的上游设置为您从中派生的存储库。然后执行以下操作:

git fetch upstream

这将从原始存储库中获取所有分支,包括 master。

将这些数据合并到您的本地 master 分支中:

git merge upstream/master

将更改推送到您的派生存储库,即原始源:

git push origin master

瞧!同步原始存储库已完成。