我在GitHub上分叉某人的存储库,并希望使用原始存储库中的提交和更新来更新我的版本。这些都是在我分发我的副本后制作的。
如何引入在原点中所做的更改并将它们合并到我的存储库中?
答案 0 :(得分:652)
您必须将原始存储库(您分叉的存储库)添加为远程存储库。
克隆完成后,您的仓库将有一个名为“
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。
另请参阅“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
步骤:
Pull Requests
。New Pull Request
。默认情况下,GitHub会将原始文件与您的fork进行比较,如果您没有进行任何更改,则无法进行任何比较。switching the base
。现在GitHub会将你的分叉与原版进行比较,你应该看到所有最新的变化。Create a pull request
进行此比较,并为您的拉取请求指定一个可预测的名称(例如,从原始更新)。Create pull request
。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网站上完全使用它。
New pull request
。Create new pull request
。答案 6 :(得分:0)
如果没有任何损失,您还可以删除叉子,只需转到设置...转到下面的危险区域部分,然后单击删除存储库。它将要求您输入存储库名称和密码。之后,您只需再次分叉原始文件即可。
答案 7 :(得分:0)