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

pem*_*ahl 16 git github git-merge

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

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

hel*_*ert 14

使用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 
Run Code Online (Sandbox Code Playgroud)

然后,rebase或者merge您的开发分支进入主分支:

$ git checkout development
$ git rebase master # OR "git merge master"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我想你误解了一些东西。不是我分叉了原始 repo 并创建了开发分支。另外,我不想将合并的更改推回远程。这只是为了本地工作。如果没有我自己的分叉和拉取请求,我该怎么做? (3认同)
  • @ThorstenHans 你显然也误解了我。我既没有原始也没有分叉的回购。我只是将它们都克隆到了我的本地机器上。分叉的 repo 包含一个分支,其中包含我想合并到原始 repo 的 master 分支的功能。 (3认同)

Bor*_*lid 7

听起来您已经克隆了两个存储库。我假设您将它们放在目录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. git merge clone2/development如有必要,请在此时解决冲突。提交结果。
  7. git checkout -b my-ongoing-development(命名您刚刚创建的分支,其中包含两个远程分支)