如何在Web界面中更新GitHub repo fork?


58

我有一个几个月前从其他项目中派生的Github存储库。现在已经几个月了,原始的主存储已更改。我想更新我的仓库以反映这些变化。在Github网络界面中可以吗?还是我只需要删除仓库并重新分叉它?




Answers:


43

您可以尝试撤销拉取请求的发生方式。

  1. 去你的叉子
  2. 发出拉取请求

    默认情况下,这将是您的右边的fork(head repo),请求将其提交推送到左侧,并将其更改为原始repo(base repo)。

  3. 单击基本存储库和头存储库的下拉列表,然后选择彼此的存储库。

    您希望自己的存储库显示在左侧(接受更改),而原始存储库显示在右侧(更改为可推送的存储库)。如下图所示:

    叉完成本身

  4. 发送拉取请求

    如果您的fork没有任何更改,则您应该能够自动接受合并。

如果您的代码因某种原因发生冲突或不够干净,则无法通过GitHub Web界面进行更新,您将需要获取代码并解决机器上的所有冲突,然后再推回分叉。


3
这仍然有效,但是不理想。这绝对是一个把戏。不是正确的方法。
杰克·威尔逊

3
确认一个坏主意。这以Github建议您将请求空提交到原始项目的方式污染了存储库。参见示例github.com/dthommes/RoboSpring/pull/3-一旦我做出了贡献,便进行了同步,现在Github希望我推送“ Syncing my fork”提交,标记为“从dthommes / master合并合并请求1” ......“
USR-本地ΕΨΗΕΛΩΝ

1
我认为这不再有效。尽管似乎有些奇怪,但没有简单的方法可以做到这一点。
Toby Allen

1
我只是尝试了一下,它似乎并没有立即起作用-更改其中一个叉子时,它立即打开了“比较更改”页面。但是,单击“跨叉比较”链接允许仍然更改另一个叉。也许您可以在答案中添加一些效果。
彼得·莫滕森

4
GitHub应该添加一个“ Sync Fork”按钮,这样您就不必创建一百万个PR。就目前而言,我正在使用命令行来更新我的叉子
Suici Doga

22

会更容易。

  1. 转到派生仓库(您的),然后单击按钮-“新请求请求”。
  2. 在打开的页面上,下拉选择框下方的消息中有一个指向“切换基础”的小链接。点击链接。
  3. 现在,它将自动导致您的原始回购。单击创建请求请求按钮,然后编写一些提交消息。
  4. 现在,它将自动导致您的分叉存储库,单击“ 合并”拉取请求确认“合并”完成。

你应该澄清的绿色按钮,这将是一个伟大的响应....
罗德里戈·格拉萨·

截至4/2016,这绝对是最好的答案。
dr01 2016年

7
这种方法的问题在于,它向分支添加了额外的提交,因此它与上游存储库并没有真正同步。
莫蒂

@Mottie有没有办法让我们知道我们的fork是否在最新的上游版本的后面,并且可以看到变化的差异,而无需实际拉出它们?
Sujay Phadke,2013年

1
@SujayPhadke在分支选择按钮下的主分叉回购页面上将显示一条消息“此分支是xx提交在xxxx:master之后。”。至于查看差异,消息的同一行中有一个“比较”按钮;或者您可以转到此链接:https://github.com/{user}/{forkedRepoName}/compare/master...{originalRepo}:master
Mottie '16

3

如何使用远程上游存储库中的更改更新派生的GitHub存储库


GitHub帮助中的说明:

配置远程前叉

同步叉


设置/操作说明:

打开Git Bash(Windows)或Linux / Mac Terminal

如果尚未克隆存储库,则必须切换到开发文件夹的工作目录,然后将其克隆到工作站。

$ git clone https://github.com/YOUR_USERNAME/YOUR_FORK.git

转到工作站上分叉存储库的工作目录。

$ cd /user/development/my_forked_repo/

列出您的fork的当前配置的远程存储库。

 $ git remote -v

origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

指定将与派生同步的新的远程上游资源库。

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

验证您为fork指定的新上游存储库。

$ git remote -v

origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

从上游存储库中获取分支及其各自的提交。提交给master的内容将存储在本地分支(上游/ master)中。

$ git fetch upstream

remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
 * [new branch]      master     -> upstream/master

检查您的fork的本地主分支。

$ git checkout master

Switched to branch 'master'

将更改从上游/主服务器合并到本地主服务器分支。这使fork的master分支与上游存储库同步,而不会丢失本地更改。

$ git merge upstream/master

Updating a422352..5fdff0f
Fast-forward
README                    |    9 -------
README.md                 |    7 ++++++
 2 files changed, 7 insertions(+), 9 deletions(-)
 delete mode 100644 README
 create mode 100644 README.md

如果您的本地分支没有任何唯一的提交,则Git将执行“快速转发”:

$ git merge upstream/master

Updating 34e91da..16c56ad
Fast-forward
 README.md                 |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

您现在需要将提交推送到您的fork。

$ git push

如果您尚未通过身份验证,它将提示您输入github用户名/密码。一旦通过身份验证,新提交将被推送到您的fork并在github上可见。


5
感谢您的详细回答,但是希望能找到使用Web界面的解决方案。
Toby Allen'3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.