【问题标题】:How to merge a pull request (or commit) from a different repository, using git?如何使用 git 合并来自不同存储库的拉取请求(或提交)?
【发布时间】:2019-08-02 03:32:38
【问题描述】:

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

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


考虑到合并一个 pull-request(来自 A)和选择一个 commit(来自 C)的看似等价,我想应该有几种不同的方式来完成一样的。

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

【问题讨论】:

    标签: git github pull-request


    【解决方案1】:

    Cherry 选择提交

    事实上,我要求的是所谓的cherry picking 提交。 但是,由于我自己的 shallow repo BC 中的原始提交 Y 的不同提交历史记录,可能 (?) 不可能拥有它 look 就像 “适当的合并拉取请求”,至少在 GitHub 的意义上不是 Network 显示的图表。
    (如果有人有其他解决方案这个,请评论。)

    该过程已经有据可查,在这种情况下,最简单的解决方案是:

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

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

    使用&lt;id&gt; 拉取特定 PR

    你也可以直接使用 PR 的 id 拉取 PR:

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

    有关其他选项,请参阅:

    【讨论】:

      【解决方案2】:

      我就是这样做的。

      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

      希望这会有所帮助。如果您发现任何问题,请告诉我。

      【讨论】:

      • 不幸的是,这没有帮助,而且看起来有点扭曲。此外,我认为了解结帐是否带有-b 开关很重要。因为没有它的默认值,意味着一个完全不同的开关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2019-09-16
      相关资源
      最近更新 更多