如何使用 git 合并来自不同存储库的拉取请求(或提交)?
How to merge a pull request (or commit) from a different repository, using git?
我已经将 GitHub 存储库 A 的 shallow 克隆(fork)到我自己的存储库中 B。因此,B 没有提交历史记录。但是,我想在回购 A 中添加一个未合并(打开)的 pull request X到 B,并且仍然让它显示为正确的合并拉取请求,但没有添加额外的分支和添加的提交历史记录。 (X 基于特定的 commit Y 在 branchC C Z.)
如何使用 CLI 中的 git 执行此操作?
考虑到合并 pull-request(来自 A)和选择 commit(来自 C)看似等价,我想应该有几种不同的方法来完成同样的事情。
我看过很多类似的问题,但它们并没有完全解决问题,因为它们通常涉及首先以各种方式获取所有提交,或者不完整。我看过:
- Merge Pull Request from Upstream Branch into a Forked Repository
- How do I merge a pull request on someone else's project in git?
我就是这样做的。
从本地的 repo 中提取所有需要的更改:
git pull
.
更改来源 URL:
git remote set-url origin https://url.com
.
切换你要推送代码的分支:
git checkout BRANCH
或 git checkout -b BRANCH
(我总是对此感到困惑)。
(可选)设置上游:
git branch --set-upstream-to=origin/BRANCH
隐藏:
git stash
提交更改:
git commit -m "feat: moving branch"
终于全力以赴:
git push
希望这对您有所帮助。如果您发现任何问题,请告诉我。
樱桃挑选提交
事实上,我要求的是所谓的 cherry picking
提交。
但是,由于我自己的 shallow repo B
和 C
中的原始提交 Y
的不同提交历史,这可能是不可能的( ?) 让它 看起来 像 "proper merged pull request",至少在 GitHubs Network
图表的意义上不是这样。
(如果有人对此有其他解决方案,请发表评论。)
该过程已被详细记录,在这种情况下,最简单的解决方案是:
git fetch git@github.com:<USERNAME>/<REPO-C> <BRANCH-Z> --no-tags
git cherry-pick <commit-Y>
git push origin master
这是迄今为止最简单的方法,因为它不需要 add/change 获取来源。
使用 <id>
拉取特定 PR
您也可以使用 PR 的 id:
直接拉取 PR
git pull https://github.com/{upstream/project} refs/pull/{id}/head
有关其他选项,请参阅:
- How to apply unmerged upstream pull requests from other forks into my fork?
我已经将 GitHub 存储库 A 的 shallow 克隆(fork)到我自己的存储库中 B。因此,B 没有提交历史记录。但是,我想在回购 A 中添加一个未合并(打开)的 pull request X到 B,并且仍然让它显示为正确的合并拉取请求,但没有添加额外的分支和添加的提交历史记录。 (X 基于特定的 commit Y 在 branchC C Z.)
如何使用 CLI 中的 git 执行此操作?
考虑到合并 pull-request(来自 A)和选择 commit(来自 C)看似等价,我想应该有几种不同的方法来完成同样的事情。
我看过很多类似的问题,但它们并没有完全解决问题,因为它们通常涉及首先以各种方式获取所有提交,或者不完整。我看过:
- Merge Pull Request from Upstream Branch into a Forked Repository
- How do I merge a pull request on someone else's project in git?
我就是这样做的。
从本地的 repo 中提取所有需要的更改:
git pull
.更改来源 URL:
git remote set-url origin https://url.com
.切换你要推送代码的分支:
git checkout BRANCH
或git checkout -b BRANCH
(我总是对此感到困惑)。(可选)设置上游:
git branch --set-upstream-to=origin/BRANCH
隐藏:
git stash
提交更改:
git commit -m "feat: moving branch"
终于全力以赴:
git push
希望这对您有所帮助。如果您发现任何问题,请告诉我。
樱桃挑选提交
事实上,我要求的是所谓的 cherry picking
提交。
但是,由于我自己的 shallow repo B
和 C
中的原始提交 Y
的不同提交历史,这可能是不可能的( ?) 让它 看起来 像 "proper merged pull request",至少在 GitHubs Network
图表的意义上不是这样。
(如果有人对此有其他解决方案,请发表评论。)
该过程已被详细记录,在这种情况下,最简单的解决方案是:
git fetch git@github.com:<USERNAME>/<REPO-C> <BRANCH-Z> --no-tags
git cherry-pick <commit-Y>
git push origin master
这是迄今为止最简单的方法,因为它不需要 add/change 获取来源。
使用 <id>
拉取特定 PR
您也可以使用 PR 的 id:
直接拉取 PRgit pull https://github.com/{upstream/project} refs/pull/{id}/head
有关其他选项,请参阅:
- How to apply unmerged upstream pull requests from other forks into my fork?