我分叉了一个GitHub存储库。然后我把一些更改推到了我的前叉。然后原始存储库合并了我的更改和其他一些。现在,我想合并那些我不知道的变化。我尝试了一个简单的拉动,然后是推送,但这会让我的提交一式两份。最好的方法是什么?
答案 0 :(得分:343)
每个存储库可能都有一个“远程”。您需要从一个遥控器拉出并推到另一个遥控器。
如果您最初从您的分叉克隆,该遥控器将被称为“原始”。如果您尚未添加它,则需要将第一个人的存储库添加为另一个远程:
git remote add firstguy git://github.com/firstguy/repo.git
在完成所有设置之后,你应该能够
git pull firstguy master
git push origin
请记住,git pull
只不过是按此顺序执行git fetch
和git merge
的宏。您只需要从第一个人的存储库中获取提交列表,然后将其分支合并到您的树中。合并应该对你在两个分支上的提交做正确的事情。
当然,GitHub永远都会为您提供快捷方式。在你的存储库的叉子上有一个“快进”按钮,如果你完全合并到另一边,你可以用来抓住你的叉子。
答案 1 :(得分:71)
所以上面接受的答案对我来说并不完美。也就是说,它似乎在它工作时失去了与原始github作者的链接,然后在那之后似乎不再起作用了。我认为问题是答案遗漏了远程名称和分支之间的/。因此,它将从远程获取一个名为master的分支,但之后无法对其执行任何操作。不太清楚为什么。
这是github recommends from their site的方式。
一旦你克隆了你的分叉回购,你需要添加一个指向原始的遥控器,就像上一个回答所说的那样。他们喜欢把它叫做上游,但没关系。
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/master
然后你只需要选择要合并的分支。请注意,这些不是本地分支,它们存储在遥控器下。但是如果你没有一个名为upstream / master(允许)的本地分支,你可以很好地合并下面的一行:
git merge upstream/master
或者,您可以使用以下行快捷方式获取/合并(在初始提取之后):
git pull upstream/master