在GitHub的分叉之间合并

我创建了一个GitHub存储库。然后我在我的叉子上做了一些改变。然后原始存储库合并了我的更改和其他一些更改。现在,我想合并那些我遗漏的更改。我尝试了一个简单的拉,然后推,但这导致我的提交副本。最好的方法是什么?

101400 次浏览

你可能有一个“远程”;对于每个存储库。你需要从一个遥控器拉,然后推到另一个遥控器。

如果您最初是从您的fork克隆的,那么该远程将被称为“原始”。如果你还没有添加它,你需要添加另一个存储库作为另一个远程:

git remote add <shortname> git://github.com/<ownerName>/repo.git

在这一切都设置好之后,你应该确实能够(github将默认分支从master更改为main,必要时更改)

git pull <shortname> master
git push origin

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

当然,GitHub,在它所有的神奇之处,给了你一个捷径。有一个“快进”;按钮,如果您完全合并到另一端,您可以使用它来赶上您的分支。

所以上面那个公认的答案并不完全适合我。也就是说,当它工作时,它似乎失去了到原始github作者的链接,然后在那之后似乎不再工作了。我认为问题在于答案遗漏了远程名称和分支之间的/。所以它会从远程获取一个名为master的分支,但不能对它做任何事情。不知道为什么。

下面是Github从他们的网站上推荐

一旦你克隆了你的fork回购,你需要添加一个远程指向原始的,就像前面的答案说的那样。他们喜欢称它为上游,但这无关紧要。

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

然后你去取

git fetch upstream

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

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

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

git merge upstream/main

或者,你也可以用下面这行来快捷获取/合并(至少在初始获取之后):

git pull upstream/main