28

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

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

4

3 回答 3

27

使用 GitHub 时,您可以使用Pull Request来执行此操作。只需将您的开发分支推送到分叉的远程存储库并按照链接文章中的说明创建拉取请求。然后,原始存储库的所有者可以将您的存储库添加为新的远程存储库,获取您的更改并将您的开发分支合并回主分支。

您的 master 分支通常没有必要完全是最新的——尽管它非常有帮助,尤其是在合并开发分支时。

首先,您应该使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 直接推送到原始存储库。

于 2013-01-29T16:20:59.537 回答
4

听起来您已经克隆了两个存储库。我将假设您将它们放在目录clone1clone2.

在进行合并之前,您需要将所有变更集放入一个存储库中。所以我们要从你的一个克隆中拉到另一个。如果您从头开始执行此操作,您只需克隆一个存储库,然后获取另一个存储库,而不是同时克隆两者。

  1. cd clone1
  2. git checkout master
  3. git remote add clone2 ../clone2(将两个遥控器放入一个仓库)。如果您没有克隆两个存储库,则不必这样做 - 您只需这样做git remote add otherthing https://<github URI>
  4. git fetchclone2(从into获取更改clone1)。现在您拥有一个包含所有内容的存储库。
  5. git checkout origin/master或者,您可以查看当地分支机构。您的偏好。请记住,origin这里指的是clone1.
  6. git merge clone2/development如有必要,请在此时解决冲突。提交结果。
  7. git checkout -b my-ongoing-development(命名您刚刚创建的分支,其中包含两个远程分支)
于 2013-01-29T17:03:34.393 回答
1

先前的评论已关闭,除了第 6 步应该是

git pull clone2 development

参考另一个远程的Git合并分支

于 2021-07-15T06:41:59.677 回答