代码之家  ›  专栏  ›  技术社区  ›  not2qubit

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

  •  0
  • not2qubit  · 技术社区  · 7 年前

    我做了一个决定 浅的 GitHub存储库的克隆(fork) A. 进入我自己的存储库 B 。因此B没有提交历史记录。但是有一个未合并(打开) 拉取请求 十、 在repoa中,我希望将其添加到B中,并且仍然将其显示为一个适当的合并拉请求,但不添加额外的分支和添加提交历史记录。(X)基于特定的 犯罪 Y 回购 C 在…上 树枝 Z .)

    如何从CLI使用git实现这一点?


    考虑到合并一个 拉取请求 (来自A)并选择一个 犯罪 (C)中,我想应该有几种不同的方法来实现同样的目标。

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

    0 回复  |  直到 7 年前
        1
  •  1
  •   not2qubit    7 年前

    Cherry选择了一个承诺

    事实上,我要求的是所谓的 cherry picking 承诺。 但是,由于我自己的提交历史不同 浅的 回购 B 和最初的承诺 Y 在里面 C ,这可能是不可能的(?)拥有它 像一个 “正确的合并拉取请求” ,至少不是在GIT的意义上 Network 如图所示。
    (如果有人对此有其他解决方案,请发表评论。)

    该程序已经有很好的文档记录,在这种情况下,最简单的解决方案是:

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

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

    使用 <id>

    您也可以直接使用PR的 身份证件 :

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

    有关其他选项,请参见:

        2
  •  0
  •   not2qubit    7 年前

    我就是这样做的。

    1. 从本地回购中提取所有必要的变更:
      git pull .

    2. 改变 起源 网址:
      git remote set-url origin https://url.com .

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

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

    5. 藏匿:
      git stash

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

    7. 最后,全面推进:
      git push

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