如何将其他叉子的未合并上游拉取请求应用到我的fork中?

问题描述 投票:424回答:7

GitHub上的一个项目,我有一个新的拉动请求,我想要进入我的分支,作者还没有进入。

有没有一种简单的方法将其他叉子的拉请求应用到我的叉子?这里还有别的东西我不见了吗?

git github pull-request
7个回答
265
投票

你可以很容易地手动完成:

  • 将另一个fork添加为repo的远程: git remote add otherfork git://github.com/request-author/project.git
  • 获取他的回购提交 git fetch otherfork
  • 然后,您有两个选项来应用拉取请求(如果您不想选择选择1)。 如果您不关心还应用在origin和pull请求之间添加的最终提交,您可以只改变形成pull请求的分支 git rebase master otherfork/pullrequest-branch 如果您只想要拉取请求中的提交,请确定它们的SHA1并执行 git cherry-pick <first-SHA1> <second-SHA1> <etc.>

250
投票

Update: Via Webpage

您也可以通过github网页完成此操作。

我假设你应该已经有一个普通仓库(MyFork)的叉子(BaseRepo),它有你感兴趣的叉子(OtherFork)的待处理拉动请求。

  1. 导航到已启动拉取请求的fork(OtherFork),您希望进入您的fork(MyFork
  2. 转到OtherFork的pull请求页面
  3. 单击新拉取请求
  4. 应提供待处理的拉取请求。记得选择合适的OtherFork分支。选择左侧作为基叉叉(MyFork)(重要)。
  5. 现在View pull request的选项应该改为Create pull request。点击这个。

现在你应该在你的fork(MyFork)中有一个挂起的pull请求,你可以接受。


67
投票

就像Tekkub先前所说的那样,你可以直接拉入分支。大部分时间使用GitHub,分支在请求用户的项目分支上只是“主”。

示例:git pull https://github.com/USER/PROJECT/ BRANCH


19
投票

一些更详细的信息对我有用。

forked repo的.git / config文件如下所示:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "origin"]
        url = [email protected]:litzinger/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
        rebase = true
[remote "source"]
        url = git://github.com/revolunet/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/source/*
        fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

然后运行“git fetch source”,然后列出forked repo中的所有pull请求。

 * [new ref]         refs/pull/54/head -> origin/pr/54
 * [new ref]         refs/pull/67/head -> origin/pr/67
 * [new ref]         refs/pull/69/head -> origin/pr/69
 * [new ref]         refs/pull/71/head -> origin/pr/71

然后在特定的拉取请求中合并运行“git merge master origin / pr / 67”


19
投票

对项目的拉取请求可能来自许多不同的作者(分叉),并且您可能不希望每个分支都有单独的远程。此外,您不希望对提交拉取请求时作者使用的分支做出任何假设,或者作者的主分支中可能还有其他内容。因此最好引用上游存储库中出现的pull请求,而不是它在其他分支中出现的那样。

步骤1:

git remote add upstream <url>

您可能已经完成了这一步,但如果没有,您将需要为上游项目定义一个远程。 URL是您分叉的项目的克隆URL。更多信息,请访问Configuring a remote for a forkSyncing a forkupstream是你给遥控器的名字,虽然它可以是任何东西,upstream是传统的名字。

第2步:

git pull upstream refs/pull/{id}/head

...其中{id}是拉取请求编号。 upstream是要从中拉出的遥控器的名称,即如果您完全按照步骤1进行“上游”。它也可以是一个URL,在这种情况下,您可以跳过第1步。

第3步:

键入合并提交的提交消息。您可以保留默认值,但我建议您提供一个很好的单行摘要,其中包含拉取请求编号,修复的问题以及简短说明:

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions

9
投票

我要做的是以下几点;

git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#

我现在已将更改合并到一个名为test_fork的测试分支中。所以任何改变都不会弄脏我的树。

如果更可取,您可以选择使用如上所述的cherry-pick来选择特定的提交。

旅途愉快 :)

© www.soinside.com 2019 - 2024. All rights reserved.