如何在不添加单独的遥控器的情况下保持我的fork同步?

让我们假设在GitHub上有一个存储库someone/foobar,我把它分叉到me/foobar

我如何从父库直接放到我的叉子上 拉出新的提交,而不必添加一个单独的遥控器 记得从那里定期拉 ?

目标是:

  • git pull从父存储库中获取
  • git push将所有内容发送到我的fork
85790 次浏览
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar
< p > 但有一个警告: < br > 如果你是唯一一个对你的fork进行更改的人,这是完美的 然而,如果它与其他人共享,你可能不得不从你的fork中提取,在这种情况下单独的遥控器是唯一的解决方案 < p >编辑:< br > 实际上,你可以 git pull git@github.com:me/foobar,这就消除了警告

.你可以选择哪个更容易记住

打开分叉Git存储库我/ foobar

点击比较:

这是页面的示例图像

你会收到通知:

< p > 没有什么可以比较的。 < br > >是我:主中所有提交的最新数据。尝试切换基数进行比较。

点击本页上的切换基数:

这是页面上的一个例子

然后你会看到在你fork它之后对人/ foobar的所有提交。

点击创建拉请求:

Here is a sample page

给拉请求一个标题,也许是一个描述,然后单击创建拉请求

在下一页中,滚动到页面底部并单击合并拉取请求确认合并

你的Git仓库我/ foobar将被更新。

编辑:rebase选项显示在这里:

enter image description here

我使用了一个相当简单的方法使用GitHub Web UI来做到这一点:

  1. 打开原始的Git存储库(不是派生的Git存储库me/foobar)
  2. 跳转到src文件夹,打开要更改的文件
  3. 单击钢笔图标。它会自动在你的个人fork中创建一个基于当前主库版本的名为“patch-1”的标签: Enter image description here
  4. <李>享受吧! Enter image description here

另一种选择是使用GitHub for Mac中的Update from upstreamRepoName/master按钮(我假设GitHub for Windows)。

Enter image description here

我不知道如何在不添加另一个遥控器的情况下完成,但是我总是添加我从upstream遥控器分叉的回购,所以我可以简单地做:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

这将同步所有分支,包括创建新分支(删除refs/heads/只更新现有分支)。如果你的任何分支已经发散,它将为该分支抛出一个错误。

“拉动式”应用程序是一个自动设置和忘记解决方案。它会将fork的默认分支与上游存储库同步。

访问URL,点击绿色的“安装”按钮,选择你想要启用自动同步的存储库。

分支直接在GitHub上每小时更新一次,在你的本地机器上,你需要拉主分支以确保你的本地副本是同步的。

也在https://stackoverflow.com/a/58965171/946850中回答。

我会简单地使用:

git pull git@github.com:someone/foobar <branch_name> && git push
  1. 访问https://github.com/me/foobar/compare/master...someone:master(当然,用相应的repo和用户名替换mesomeonefoobar)

  2. 如果你看到绿色文本Able to merge,然后按创建拉请求

  3. 在下一页,滚动到页面底部,单击合并拉取请求确认合并

最近(2021年5月初),GitHub网站为此提供了一个一键式按钮:

< img src = " https://i.stack.imgur.com/4tngM.png " alt = " / >

我无法抗拒点击它的诱惑。

After

关于这个新特性,请参阅GitHub的官方推文