【问题标题】:How do I merge a pull request on someone else's project in git?如何在 git 中合并其他人项目的拉取请求?
【发布时间】:2011-07-30 00:25:03
【问题描述】:

我在我的电脑上克隆了这个 repo:https://github.com/derobins/wmd.git

虽然它有几个错误,但看起来另一个用户已修复它们并发出“拉取请求”(我假设这些是提交更改的请求?)

是否可以将这些更改合并到我的本地版本中?

编辑:为了清楚起见,这是不是我的存储库。我正在使用 derobins 的 WMD 编辑器,但它有几个错误,这些拉取请求声称要修复。我已经在 Ubuntu(不在 github)上克隆了 repo,并希望尽可能合并这些更改。

【问题讨论】:

  • @CharlesB:这根本不是重复的。没有人向发送拉取请求,这不是我的存储库...

标签: git github pull-request


【解决方案1】:

(GitHub 上有 very thorough documentation 说明如何处理拉取请求。)

基本上,您需要为提出拉取请求的人的存储库添加一个远程,例如:

git remote add helpful git://github.com/helpful-person/whatever.git

...然后将他们的更改提取到远程跟踪分支中:

git fetch helpful

... 这样现在您就可以在上游存储库的克隆中拥有来自该人的 GitHub 存储库的所有提交。如果您查看该拉取请求中的其他提交,您可以:

  1. 合并最新的,例如git merge 75708aeab5
  2. cherry pick 中的每一个更改,例如git cherry-pick 2142db89, git cherry-pick 75708aeab5
  3. 创建一个本地分支以进一步处理它们,例如git checkout -b fix-for-issue3 75708aeab5
  4. 等。等

另一种方法是只克隆提出拉取请求的贡献者的存储库,如果这相同但针对那些修复。

【讨论】:

  • 顺便说一句,我会先签出有用/基本修复并将其重新设置在我的主服务器上,然后检查主服务器,然后合并有用/基本修复
  • 一旦他从拉取请求中获取提交,OP 可以做的事情有无穷无尽的变化——我描述的是一个带有明确附带条件的简单的。
  • 如果有一个命令就好了,例如git merge github.com/repo/project/pull/119 ...如果你想要一些轻量级的东西,你可以顺便说一句 curl https://github.com/repo/project/pull/119.patch 然后应用补丁
  • @PartlyCloudy:好吧,你可以这样做:git pull git://github.com/helpful-person/whatever.git [SHA1-of-commit-at-tip-of-pull-request]
【解决方案2】:

接受的答案建议为提出拉取请求的人的存储库克隆或添加远程。另一个cleaner and simpler way就是使用这个命令

git pull https://github.com/otheruser/repo.git branchname

例如,在撰写本文时,ghi 有三个尚未合并的开放拉取请求。这就是我将它们合并到我的本地存储库中所做的。

# I want to make sure my master is in sync with the upstream master
git checkout -b merge-patches master
# first pull request
git pull --no-ff https://github.com/TiddoLangerak/ghi.git master
# second pull request
git pull --no-ff https://github.com/wayfare/ghi.git master

请注意,这两个拉取请求都是从 master 发送的,这就是我从他们的 master 分支拉取的原因。

这样,其他存储库就不会添加到您的遥控器中,您也不必在本地挑选或克隆它们。

【讨论】:

  • 我最喜欢这个答案,尽管这对我不起作用。我不断收到fatal: Couldn't find remote ref action-schema Unexpected end of command stream
  • @DaniëlW.Crompton 最可能的原因是 git 存储库 URL 不正确。
  • @MonsterMMORPG 在这种情况下,提交者已经删除了他的存储库,正如unknown repository 在“filipkristo 想要将 1 个提交合并到 DetectiveSquirrel:master from unknown repository”中所示。您必须下载补丁并手动应用它。您可以从此链接patch-diff.githubusercontent.com/raw/DetectiveSquirrel/… 下载补丁并应用补丁,请参阅git apply。这是一个很好的关于 git 补丁的教程 ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git
【解决方案3】:

您将 repo 克隆到您的 github 帐户。然后只需访问克隆存储库的 forkqueue 并选择要合并到存储库中的补丁。

【讨论】:

  • 无需克隆其他人的存储库 - 只需将他们的存储库作为远程别名添加到您现有的存储库并git fetch 他们的更改,如 Mark Longair 的回答中所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2016-11-15
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 2019-12-08
相关资源
最近更新 更多