关于git:GitHub中的fork之间的合并

Merging between forks in GitHub

我创建了一个Github存储库。然后我把一些零钱推到我的叉子上。然后原始存储库合并了我的更改和其他一些更改。现在,我想合并那些我丢失的更改。我尝试了一个简单的拉,然后是推,但这让我的承诺重复了。最好的方法是什么?


您可能对每个存储库都有一个"远程"。您需要从一个遥控器中拔出并推到另一个遥控器。

如果您最初是从您的fork克隆的,那么这个遥控器将被称为"origin"。如果尚未添加,则需要将第一个人的存储库添加为另一个远程:

1
git remote add firstguy git://github.com/firstguy/repo.git

在一切就绪之后,你真的应该能够

1
2
git pull firstguy master
git push origin

记住,git pull只不过是一个宏,它按顺序执行git fetchgit merge。您只需要从第一个人的存储库中获取提交列表,然后将他的分支合并到您的树中。合并应该对两个分支上的提交做正确的事情。

当然,Github,以其永恒的敬畏,给了你一条捷径。在存储库的分支上有一个"快进"按钮,如果完全合并到另一端,可以使用它来捕获分支。


所以上面接受的答案对我来说并不完美。也就是说,当它工作时,它似乎失去了与原来的Github作者的链接,之后似乎不再工作了。我认为问题在于答案遗漏了远程名称和分支之间的/问题。因此,它将从远程获取一个名为master的分支,但随后将无法对其执行任何操作。不太清楚为什么。

以下是Github在其网站上推荐的方式。

一旦克隆了分叉回购,您就需要添加一个指向原始回购的远程设备,就像前面的答案所说的那样。他们喜欢称之为上游,但这并不重要。

1
git remote add upstream git://github.com/octocat/Spoon-Knife.git

然后你去拿

1
git fetch upstream

您将看到可用于合并的版本

1
2
3
From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

然后您只需要选择要合并的分支。请注意,这些不是本地分支,它们存储在远程设备下。但是如果您没有一个名为upstream/master的本地分支(这是允许的),您应该可以很好地与下面的行合并:

1
git merge upstream/master

或者,您可以将提取/合并(至少在初始提取之后)快捷方式设置为:

1
git pull upstream/master