我分叉了一个 GitHub 存储库。然后我将一些更改推送到我的 fork。然后原始存储库合并了我的更改和其他一些更改。现在,我想合并我缺少的那些更改。我尝试了一个简单的拉,然后是推,但这会导致我的提交重复。最好的方法是什么?
2 回答
您可能对每个存储库都有一个“远程”。您需要从一个遥控器拉出并推送到另一个。
如果您最初是从您的 fork 克隆的,则该遥控器将被称为“origin”。如果您尚未添加它,则需要将另一个存储库添加为另一个远程:
git remote add <shortname> git://github.com/<ownerName>/repo.git
完成所有设置后,您确实应该能够(github将默认分支从更改master
为main
,根据需要进行更改)
git pull <shortname> master
git push origin
请记住,git pull
只不过是一个按顺序执行git fetch
and的宏。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/main
然后,您只需要选择要合并的分支。请注意,这些不是本地分支,它们存储在遥控器下。但是,如果您没有名为 upstream/master 的本地分支(这是允许的),您应该可以与以下行合并:
git merge upstream/main
或者,您可以使用以下行来缩短获取/合并(至少在初始获取之后):
git pull upstream/main