如何使用git合并来自不同存储库的拉取请求(或提交)?

时间:2019-03-11 18:37:16

标签: git github pull-request

我已经将GitHub存储库 A 克隆(分支)到我自己的存储库 B 中。因此,没有针对B的提交历史记录。但是,我想添加到B中的仓库A中有一个未合并(打开)的 pull请求 X ,它显示为适当的合并拉取请求,但没有添加额外的分支和添加的提交历史记录。 (X基于分支 Z 上回购 C 中特定的 commit Y )

如何使用CLI中的git进行此操作?


鉴于合并 pull-request (来自A)和选择 commit (来自C)的看似等效,我想应该有几种不同的方法可以完成一样。

我已经看过许多类似的问题,但是它们并没有完全解决该问题,因为它们通常涉及首先以各种方式来获取所有提交,或者是不完整的。我看过:

2 个答案:

答案 0 :(得分:0)

这就是我的方法。

  1. 从本地存储库中提取所有必需的更改:
    git pull

  2. 更改来源 URL:
    git remote set-url origin https://url.com

  3. 将要推送代码的分支切换到:
    git checkout BRANCHgit checkout -b BRANCH
    (我总是对此感到困惑)。

  4. (可选)设置上游:
    git branch --set-upstream-to=origin/BRANCH

  5. 藏匿处:
    git stash

  6. 提交更改:
    git commit -m "feat: moving branch"

  7. 最后将其全部推送:
    git push

希望这会有所帮助。让我知道是否有任何问题。

答案 1 :(得分:0)

樱桃选择一个提交

实际上,我要的是cherry picking一次提交。 但是,由于我自己的 shallow 存储库BY中原始的C提交历史有所不同,因此可能(?)使其具有外观的外观,就像“适当的合并拉取请求” 一样,至少在显示的GitHub Network图的意义上没有。
(如果有人对此有其他解决方案,请发表评论。)

该过程已被很好地记录下来,在这种情况下,最简单的解决方案是:

git fetch git@github.com:<USERNAME>/<REPO-C> <BRANCH-Z> --no-tags
git cherry-pick <commit-Y>
git push origin master

这是迄今为止最简单的方法,因为它不需要添加/更改获取源。

通过<id>拉动特定PR

您也可以直接使用PR的 id 拉动PR:

git pull https://github.com/{upstream/project} refs/pull/{id}/head

有关其他选项,请参见: