将新更新从原始GitHub存储库拉取到分叉的GitHub存储库

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

我怎样才能拉入在原点中所做的更改并将它们合并到我的存储库中?

295526 次浏览

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

GitHub留档分叉存储库

旧GitHub界面的截图,在

克隆完成后,您的repo将有一个名为“origin”的遥控器,指向您在GitHub上的分叉。
不要让名称混淆你,这不会指向你分叉的原始存储库。为了帮助您跟踪该存储库,我们将添加另一个名为“上游”的远程:

$ 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

还有一个命令行工具(#0),可以方便上述操作

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

命令执行后的结果流程图

请参阅“Git分叉实际上是Git克隆吗?”。

除了VonC的答案,你还可以根据自己的喜好进一步调整它。

从远程分支获取后,您仍然需要合并提交。我会替换

$ git fetch upstream

$ git pull upstream master

因为git拉取本质上是git获取+git合并。

视频显示如何直接从GitHub更新分叉

步骤:

  1. 在GitHub上打开你的分叉。
  2. 点击Pull Requests
  3. 单击New Pull Request。默认情况下,GitHub会将原始版本与您的分叉进行比较,如果您没有进行任何更改,就不应该有任何可以比较的内容。
  4. 单击switching the base。现在GitHub会将您的分叉与原始分叉进行比较,您应该会看到所有最新的更改。
  5. 单击Create a pull request进行此比较,并为您的拉取请求分配一个可预测的名称(例如,从原始更新)。
  6. 点击Create pull request
  7. 向下滚动并单击Merge pull request,最后单击Confirm合并。如果您的分叉没有任何更改,您将能够自动合并它。

用途:

git remote add upstream ORIGINAL_REPOSITORY_URL

这将设置您的上游到您分叉的存储库。然后这样做:

git fetch upstream

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

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

git merge upstream/master

将更改推送到您的分叉存储库,即原点:

git push origin master

瞧!您已经完成了原始存储库的同步。

如果您使用的是GitHub桌面应用程序,右上角有一个同步按钮。单击它,然后在左上角附近Update from <original repo>

如果没有要同步的更改,这将是非活动的。

这里有一些截图让这变得容易。

如果没有什么损失,您也可以删除您的分叉,只需转到设置…转到下面的危险区域部分并单击删除存储库。它会要求您输入存储库名称和密码。之后,您只需再次分叉原始。

要自动将分叉存储库与父存储库同步,您可以使用GitHub上的拉取应用

有关更多详细信息,请参阅自述文件

对于要保留对分叉存储库所做更改的高级设置,请参阅我对类似问题这里的回答。

如果你想在没有cli的情况下完成,你可以在Github网站上完全完成。

  1. 转到您的分叉存储库。
  2. 点击New pull request
  3. 请确保将您的分叉设置为基础存储库,将原始(上游)存储库设置为头存储库。通常,您只想同步主分支。
  4. Create a new pull request
  5. 选择合并按钮右侧的箭头,并确保选择重新基础而不是合并。然后单击按钮。这样,它就不会产生不必要的合并提交。
  6. 成交