我 fork 了一个 GitHub 存储库,然后将一些更改推送到我的 fork 上。随后原存储库合并了我的更改和其他的更改。现在,我想合并我遗漏的那些更改。我尝试了简单的拉取和推送,但这会导致我的提交重复。有什么最好的方法吗?
你可能对于每个仓库都有一个“remote”(远程)版本。你需要从一个remote拉取代码并推送到另一个remote中。
如果你最开始是从你的分支(fork)中克隆的,那么这个remote被称为“origin”。如果你还没有将另一个仓库作为另一个remote添加进去,那么你需要先添加它:
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 在其永恒的卓越中当然给了你一条捷径。如果您完全合并到另一侧,则您的存储库分支上有一个“快进”按钮,您可以使用它来将您的 fork 捕捉到最新状态。
以上被接受的答案对我来说并没有完美地起作用。具体来说,它在工作时似乎丢失了到原始GitHub作者的链接,之后似乎就不能再正常工作了。我认为问题在于答案忽略了远程名称和分支之间的/。因此,它会从远程获取名为master的分支,但随后无法对其执行任何操作。不是很确定原因。
这是GitHub建议的方法。
一旦克隆了您fork的存储库,您确实需要添加一个指向原始存储库的远程,就像前面的答案所说的那样。他们喜欢称其为upstream,但并不重要。
git remote add upstream git://github.com/octocat/Spoon-Knife.git
然后你获取(fetch)数据
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 rebase
会更好,而且可以避免那些难看的空合并提交。 - Fruch
git remote add snaury git@github.com:snaury/script-runner
。 - oHo