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

我如何从父库直接将新提交拉到我的fork,而不需要添加一个单独的远程并记得定期从那里拉?

目标是:

Git从父存储库中获取 Git推送把所有东西都送到我的叉子上


当前回答

git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

但有一个警告: 如果你是唯一一个对你的fork进行更改的人,这是完美的。 然而,如果它是与其他人共享的,你可能不得不从你的分叉,在这种情况下,一个单独的遥控器是唯一的解决方案。

编辑: 实际上,您可以git调用git@github.com:me/foobar,这样就消除了警告。 哪一个更容易记住,由你来选择。

其他回答

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

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

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

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

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

关于这项新功能,请参阅GitHub的官方推文。

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

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

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

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

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

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/只更新现有分支)。如果你的任何分支已经发散,它将为该分支抛出一个错误。