275

我分叉了一个 GitHub 存储库。然后我将一些更改推送到我的 fork。然后原始存储库合并了我的更改和其他一些更改。现在,我想合并我缺少的那些更改。我尝试了一个简单的拉,然后是推,但这会导致我的提交重复。最好的方法是什么?

4

2 回答 2

370

您可能对每个存储库都有一个“远程”。您需要从一个遥控器拉出并推送到另一个。

如果您最初是从您的 fork 克隆的,则该遥控器将被称为“origin”。如果您尚未添加它,则需要将另一个存储库添加为另一个远程:

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

完成所有设置后,您确实应该能够(github将默认分支从更改mastermain,根据需要进行更改)

git pull <shortname> master
git push origin

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

当然,GitHub 永远令人敬畏,它为您提供了一条捷径。如果您完全合并到另一侧,您的存储库分支上有一个“快进”按钮,您可以使用它来赶上您的分支。

于 2009-07-14T03:46:36.623 回答
81

所以上面接受的答案对我来说并不完美。即,它似乎在工作时失去了与原始 github 作者的链接,然后似乎不再工作了。我认为问题在于答案遗漏了远程名称和分支之间的 / 。所以它会从远程获取一个名为 master 的分支,但不能用它做任何事情。不太清楚为什么。

这是github 从他们的网站推荐的方式。

一旦你克隆了你的分叉存储库,你确实需要添加一个指向原始的远程,就像前面的答案所说的那样。他们喜欢称它为上游,但这并不重要。

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
于 2012-01-26T22:06:49.743 回答