想象一下,我已经 fork 了一个 Github 存储库,并且在进行了许多更改后,发现自动合并我的拉取请求是不可能的。
但我不想将母存储库克隆到我的本地驱动器以便reset --hard
或merge -f
.
我的主要问题是遥控器——我似乎无法找到将远程引用添加到 Github API 之类的东西的方法,因此我无法将我的远程存储库合并到我最初派生的父存储库中。
如果我不清楚,请告诉我,我很乐意编辑我的问题。
我不完全确定你在这里问什么。首先,您不合并存储库,而是合并分支。存储库只保存与它们关联的分支和提交。其次,为了将远程添加到本地存储库,您不需要与 GitHub API 交互。而且我建议不要将远程添加到您的远程存储库,因为它不会自动保持最新。
我通常做的是upstream
向我的本地存储库添加一个新的远程:
git remote add upstream <url-to-parent>
获取更新的引用:
git fetch upstream
现在您可以访问父存储库中的最新数据。好的部分是存储库中的大多数对象都将被重用,因此您不会拥有完全独立的副本。upstream
现在您可以通过遥控器访问父仓库中的内容。例如,您可以在父存储库中合并最新版本的 master:
git merge upstream/master
您还可以在更新后的 master 上重新设置当前的更改集(小心这一点!):
git rebase upstream/master
当它是私人分支机构时,我倾向于选择后者。如果有人在我的分支上构建,有时前者是必要的。如果你还没有处理过 rebase,你可能不希望这是你第一次体验它。你会想在一个压力更小、更可控的环境中进行实验。
无论你决定做什么,一定要学会处理合并冲突。大多数都很容易解决,从长远来看,它会让 Git(或任何其他 VCS)的生活变得更好。
更新
在评论中进行了一些讨论之后,现在很明显您希望将您的工作合并回上游。是的,这是完全可能的。事实上,如果你已经合并upstream/master
到你的 master 分支,你真正需要做的就是:
git push upstream master
这会将您的主分支推送到主分支项目的远程存储库。它应该是快进的,没有理由使用--force
. 如果您确实看到一些关于无法快进或使用 的建议,请--force
小心。丢失数据的可能性很大。
在这种模式下,我更喜欢使用git rebase upstream/master
后跟 agit push upstream master
来避免"Merging upstream/master into master"
在日志消息中看到类似的内容。正如我之前提到的,git rebase
它也有自己的担忧。
在这种模式下,master 是您和上游之间发生所有合并和解析的地方。您不能直接合并到远程引用中,因为没有(本地)与之关联的分支。 git merge
需要一个工作树来工作,以防万一出现合并冲突。但是在你的场景中你真的不需要它。合并上游主分支后,您可以毫无问题地将分支向上推。