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


301

假设someone/foobar我在GitHub上有一个存储库me/foobar

如何将新的提交从父存储库直接拉到我的fork,而不必添加单独的远程服务器 并记得定期从那里拉出

目标是:

  • git pull 从父存储库中获取
  • git push 把一切都寄给我

26
@Olufemi给出的令人惊讶的答案似乎可以满足您的要求,除了ChristianGosch在评论中指出的那样,您最终在分支的顶部出现了“合并提交”,并且“没有可比较的内容”不会出现。对于要为其创建分支以供其拉动的许多项目,这似乎是不可接受的。因此,如果不在个人计算机上运行奥术git命令,真的没有办法在github中完成最基本的贡献者工作流程吗?还是每次我想贡献的时候我都应该丢掉我的整个仓库并重新分叉?
nealmcb 2014年




@nealmcb如果重新设置基准,是否可以避免分支顶部的“合并提交”问题?
Marko

Answers:


585

打开分支的Git存储库me / foobar

点击比较

这是页面的示例图像

您将收到通知:

没有什么可比较的。
someone:master是最新的,其中包含me:master的所有提交。尝试切换基准进行比较。

单击此页面上的切换基准

这是页面上的示例

然后,您可以查看在分叉某天之后对某人/ foobar所做的所有提交。

单击创建请求请求

这是一个示例页面

为拉取请求提供一个标题,可能还提供一个描述,然后单击“ 创建拉取请求”

在下一页上,滚动到页面底部,然后点击合并拉取请求确认合并

您的Git存储库me / foobar将被更新。

编辑:变基选项显示在这里:

在此处输入图片说明


50
这是令人困惑的,因为当您切换基本github时,您会在页面中找到原始存储库,因此您似乎在上游派生处打开了一个拉取请求。但这完全可行。
Eduardo

8
为了避免上述混乱的局面提,它最好按一下Edit按钮,手动切换base forkme/foobarhead forksomeone/foobar。这样就很清楚了
macemers 2014年

26
另一个:如果您之前没有做过,那么这样做很好,但是之后在提交历史记录中有一个“合并提交”。因此,“没有什么可比”不会出现。取而代之的是,必须使用“编辑”按钮并手动互换底座和前叉才能使它起作用。
Christian Gosch 2014年

26
有没有办法摆脱那个荒谬的合并提交?
kumarharsh

17
自2016年9月起 @kumar_harsh ,现在为拉取请求提供了“ rebase and merge”选项,可以避免合并提交。
waldyrious

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

但是有一个警告:
如果您是唯一一个更改前叉的人,这是完美的。
但是,如果与其他人共享,则可能需要从叉子上拔出,在这种情况下,单独的遥控器是唯一的解决方案。

编辑:
实际上,您可以 git pull git@github.com:me/foobar删除警告。
您的选择更容易记住。


8

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

  1. 打开原始的Git存储库(而不是派生的Git存储库me/foobar
  2. 跳转到src文件夹,然后打开要更改的文件
  3. 单击笔图标。它将根据主存储库的当前版本在您的个人fork中自动创建一个名为“ patch-1”的标签: 在此处输入图片说明
  4. 请享用! 在此处输入图片说明

3
尝试此操作,基本上是在原始git repo中的文件上打开编辑器。我没有写特权(通过设计)到原始git repo中。看来对于这种方法,您必须更改文件,否则无法“保存”文件。如果不保存文件,我将无法获得与“ patch-1”分支等效的文件显示在我的派生存储库中。我在这里想念什么?
Electro-Bunny 2015年

5

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

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

该分支每小时直接在GitHub上更新一次,在本地计算机上,您需要拉主分支以确保本地副本同步。

https://stackoverflow.com/a/58965171/946850中也得到了答复。


1

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

在此处输入图片说明


TIL:在Web界面之外还有GitHub的应用程序:-) [而且遗憾的是,它们之间的体验不统一]
Tom Goodfellow

我在Windows中看不到
Denis,

1
@Denis,这是他们的旧应用。我不确定他们的新应用有此功能。
史蒂夫·摩瑟

啊哈 这在“ GitHub Desktop”(适用于Mac,不确定Windows)中有效。
michaelok

0

我不知道如何在不添加另一个遥控器的情况下完成此操作,但是我总是将我从中分叉的存储库添加为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/分支(删除则仅更新现有分支)。如果您的分支中有任何分支偏离,将对该分支引发错误。

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.