如何将分叉回购的分支合并到原始回购的主分支?

时间:2013-01-29 16:03:18

标签: git github git-merge

GitHub上有一个开源项目。它的原始仓库包含最新的主分支。现在有人(不是我)分配了这个仓库,从主分支创建了一个开发分支,并将东西添加到开发分支。我现在想要做的是将开发分支合并回主分支。不幸的是,分叉回购的主分支不是最新的。另请注意,我没有拥有两个相应的远程回购。

目前,我已使用git clone将原始仓库和分叉仓库克隆到我的本地机器。如何将forked repo的开发分支合并到我本地计算机上原始仓库的主分支中(即不在远程服务器上,这是不可能的)?

3 个答案:

答案 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 

然后rebasemerge您的开发分支进入主分支:

$ git checkout development
$ git rebase master # OR "git merge master"

如有必要,解决所有冲突。合并时,使用git commit完成合并,当变基使用git commit && git rebase --continue时。

您现在应该能够git push到分叉存储库的原点,并创建一个拉取请求。或者,如果您有权这样做,您也可以从fork直接推送到原始存储库。

答案 1 :(得分:2)

听起来你已经克隆了两个存储库。我假设你在目录clone1clone2中有它们。

您需要先将所有变更集合并到一个存储库中,然后才能进行合并。所以我们要把你的一个克隆拉到另一个克隆。如果您从头开始这样做,您只需克隆一个存储库,然后获取另一个,而不是克隆它们。

  1. cd clone1
  2. git checkout master
  3. git remote add clone2 ../clone2(将两个遥控器放入一个回购中)。如果您没有克隆这两个存储库,则不必执行此操作 - 您只需执行git remote add otherthing https://<github URI>
  4. git fetch(从clone2获取更改为clone1)。现在你有一个包含所有内容的存储库。
  5. git checkout origin/master或者您可以查看当地分行。你的偏好。请注意,此处origin指的是clone1
  6. 的来源
  7. git merge clone2/development如有必要,请在此时解决冲突。提交结果。
  8. git checkout -b my-ongoing-development(命名您刚刚创建的分支,其中包含两个远程分支)

答案 2 :(得分:0)

上一条评论已经结束,除了第6步应该是

git pull clone2 development

参考Git merge branch of another remote