如何在他人的git项目中合并pull request?

56

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

然而,它存在几个bug,另一个用户似乎已经修复了它们并发布了“Pull requests”(我假设这是请求将他们的更改提交的意思?)

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

编辑:仅确保清楚,这不是我的存储库。 我正在使用来自derobins的WMD编辑器,但它有一些bug,这些拉取请求声称可以修复。 我已在Ubuntu中克隆了该仓库(不在github中),希望如有可能,能够将这些更改合并进去。


4
@CharlesB: 这完全不是重复。没有人给发送过拉取请求,这不是我的代码库... - DisgruntledGoat
3个回答

58

(GitHub有非常详细的文档,介绍如何处理拉取请求。)

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

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

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

git fetch helpful

现在你已经将该人的GitHub存储库中的所有提交克隆到了上游存储库的克隆版本中。如果您查看该拉取请求中的其他提交,您可以:

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

另一种选择是只克隆制造拉取请求的贡献者的存储库,如果那些修复是相同的话。


顺便说一下,我会先检出 helpful/essential-fix 分支并在我的主分支上进行变基,之后再检出主分支并将 helpful/essential-fix 分支合并进去。 - kalkin
一旦从拉取请求中获取提交记录,OP可以进行无数种变化 - 我描述了一个简单的变化,并明确说明了条件。 - Mark Longair
1
如果有一个单一的命令就好了,例如 git merge https://github.com/repo/project/pull/119 ... 如果你想要轻量级的东西,你可以使用 curl https://github.com/repo/project/pull/119.patch 然后应用补丁。 - Partly Cloudy
3
你可以使用以下命令进行操作:git pull git://github.com/helpful-person/whatever.git [SHA1-of-commit-at-tip-of-pull-request] - Mark Longair

34

已接受的答案建议克隆或添加远程库以获取发起拉取请求的人的存储库。另一种更加干净简单的方式是使用此命令。

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分支中拉取的原因。

这样做可以避免将其他存储库添加到您的远程存储库中,也不需要手动选择或在本地克隆它们。


我最喜欢这个答案,尽管它对我没有用。我一直收到“fatal: Couldn't find remote ref action-schema Unexpected end of command stream”错误信息。 - Daniël W. Crompton
2
@DaniëlW.Crompton 最有可能的原因是 Git 仓库 URL 不正确。 - Andrew-Dufresne
@MonsterMMORPG 在这种情况下,提交者已删除他的存储库,如“filipkristo想从未知存储库合并1个提交到DetectiveSquirrel:master”中所示。您将需要手动下载补丁并应用它。您可以从此链接https://patch-diff.githubusercontent.com/raw/DetectiveSquirrel/Pokemon-Go-Rocket-API/pull/48.patch下载补丁,并查看`git apply`以应用补丁。这里有一个关于git补丁的不错教程https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/。 - Andrew-Dufresne

-2
你可以将代码库克隆到你的 GitHub 账户中。然后访问你克隆的代码库的 forkqueue,选择你想要合并到你的代码库中的补丁即可。

2
不需要克隆其他人的存储库 - 只需将其存储库作为远程别名添加到您现有的存储库中,并使用git fetch获取他们的更改,如Mark Longair的答案中所述。 - Andrew Childs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接