将原始GitHub存储库中的新更新提取到分叉的GitHub存储库中

时间:2010-10-11 06:06:37

标签: git github

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

如何引入在原点中所做的更改并将它们合并到我的存储库中?

8 个答案:

答案 0 :(得分:652)

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

来自GitHub fork man page

fork

  

克隆完成后,您的仓库将有一个名为“origin”的远程指向GitHub上的分叉。
  不要让这个名字混淆你,这并不是指你分叉的原始回购。为了帮助您跟踪该回购,我们将添加另一个名为“upstream”的远程:

$ cd github-services
$ git remote add upstream git://github.com/pjhyett/github-services.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

您还有ruby gem which can facilitate those GitHub operations

forked

另请参阅“Git fork is git clone?”。

答案 1 :(得分:95)

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

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

$ git fetch upstream

$ git pull upstream master

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

答案 2 :(得分:62)

video显示how to update a fork directly from GitHub

步骤:

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

答案 3 :(得分:44)

使用:

git remote add upstream ORIGINAL_REPOSITORY_URL

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

git fetch upstream      

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

在本地主分支中合并此数据:

git merge upstream/master

将更改推送到分叉存储库,即到源:

git push origin master

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

答案 4 :(得分:1)

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

如果没有要同步的更改,则此操作将处于非活动状态。

以下some screenshots可以轻松实现这一目标。

答案 5 :(得分:1)

如果您想不使用cli进行操作,则可以在Github网站上完全使用它。

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

答案 6 :(得分:0)

如果没有任何损失,您还可以删除叉子,只需转到设置...转到下面的危险区域部分,然后单击删除存储库。它将要求您输入存储库名称和密码。之后,您只需再次分叉原始文件即可。

答案 7 :(得分:0)

要自动将派生的存储库与父存储库同步,可以在GitHub上使用Pull App

有关更多详细信息,请参见Readme

要在高级设置中保留对分支存储库所做的更改,请参考我对类似问题here的回答。