我创建了一个GitHub存储库。然后我在我的叉子上做了一些改变。然后原始存储库合并了我的更改和其他一些更改。现在,我想合并那些我遗漏的更改。我尝试了一个简单的拉,然后推,但这导致我的提交副本。最好的方法是什么?
每个存储库可能都有一个“遥控器”。你需要从一个遥控器拉,然后推到另一个遥控器。
如果你最初是从你的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和git 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
推荐文章
- Git分支:master vs. origin/master vs. remotes/origin/master
- 如何根据文件扩展名过滤git差异?
- 如何设置一个git项目使用外部回购子模块?
- Git同时在两个分支上工作
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?