我分叉了一个GitHub存储库。然后,我对叉子进行了一些更改。然后,原始存储库合并了我的更改和其他更改。现在,我想合并那些我缺少的更改。我尝试了一次简单的拉动,然后再进行推压,但这会导致重复提交。最好的方法是什么?
我分叉了一个GitHub存储库。然后,我对叉子进行了一些更改。然后,原始存储库合并了我的更改和其他更改。现在,我想合并那些我缺少的更改。我尝试了一次简单的拉动,然后再进行推压,但这会导致重复提交。最好的方法是什么?
Answers:
您可能对每个存储库都有一个“远程”。您需要从一个遥控器拉出,然后推到另一个。
如果您最初是从分叉中克隆的,则该远程将被称为“起源”。如果尚未添加,则需要将第一人称的存储库添加为另一个远程存储库:
git remote add firstrepo git://github.com/first/repo.git
完成所有设置后,您确实应该能够
git pull firstrepo master
git push origin
请记住,git pull
无非就是按该顺序执行git fetch
和的宏git merge
。您只需要从第一人称存储库中获取提交列表,然后将其分支合并到您的树中即可。合并应该对两个分支上的提交执行正确的操作。
当然,GitHub具有永久的强大功能,为您提供了一个捷径。如果您完全合并到另一端,则存储库的分支上有一个“快进”按钮,您可以使用它来补上分支。
因此,上面接受的答案对我而言并不完美。也就是说,当它工作时,似乎失去了与原始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/master
然后,您只需要选择要合并的分支即可。请注意,这些不是本地分支,它们存储在远程目录下。但是,如果您没有名为上游/主站点的本地分支(允许使用),则应与以下行合并:
git merge upstream/master
或者,您可以使用以下行来缩短获取/合并操作(至少在初始获取之后):
git pull upstream/master
git rebase
它会更好地工作,并且省去那些难看的空合并提交