GitHub上有一个开源项目。它的原始仓库包含最新的主分支。现在有人(不是我)分配了这个仓库,从主分支创建了一个开发分支,并将东西添加到开发分支。我现在想要做的是将开发分支合并回主分支。不幸的是,分叉回购的主分支不是最新的。另请注意,我没有拥有两个相应的远程回购。
目前,我已使用git clone
将原始仓库和分叉仓库克隆到我的本地机器。如何将forked repo的开发分支合并到我本地计算机上原始仓库的主分支中(即不在远程服务器上,这是不可能的)?
答案 0 :(得分:12)
使用GitHub时,您可以使用Pull Request执行此操作。只需将开发分支推送到分叉的远程存储库,然后按照链接文章中的描述创建拉取请求。然后,原始存储库的所有者可以将您的存储库添加为新的远程存储库,获取您的更改并将您的开发分支合并回主分支。
您的主分支通常不需要完全更新 - 尽管它非常有用,特别是在合并开发分支时。
首先,您应该将分叉存储库中的master
分支更新:
$ git remote add upstream ssh://path/to/original/repo
$ git checkout master
$ git fetch upstream # Instead of "fetch" & "merge", "pull" would also work
$ git merge upstream/master
然后rebase
或merge
您的开发分支进入主分支:
$ git checkout development
$ git rebase master # OR "git merge master"
如有必要,解决所有冲突。合并时,使用git commit
完成合并,当变基使用git commit && git rebase --continue
时。
您现在应该能够git push
到分叉存储库的原点,并创建一个拉取请求。或者,如果您有权这样做,您也可以从fork直接推送到原始存储库。
答案 1 :(得分:2)
听起来你已经克隆了两个存储库。我假设你在目录clone1
和clone2
中有它们。
您需要先将所有变更集合并到一个存储库中,然后才能进行合并。所以我们要把你的一个克隆拉到另一个克隆。如果您从头开始这样做,您只需克隆一个存储库,然后获取另一个,而不是克隆它们。
cd clone1
git checkout master
git remote add clone2 ../clone2
(将两个遥控器放入一个回购中)。如果您没有克隆这两个存储库,则不必执行此操作 - 您只需执行git remote add otherthing https://<github URI>
git fetch
(从clone2
获取更改为clone1
)。现在你有一个包含所有内容的存储库。git checkout origin/master
或者您可以查看当地分行。你的偏好。请注意,此处origin
指的是clone1
。git merge clone2/development
如有必要,请在此时解决冲突。提交结果。git checkout -b my-ongoing-development
(命名您刚刚创建的分支,其中包含两个远程分支)答案 2 :(得分:0)