GitHub上的一个项目,我有一个fork,它有一个新的pull请求,我想把它拉到我的fork中,但作者还没有拉进去。

有一个简单的方法来应用从其他叉子的拉请求到我的叉子?这里还有什么我没注意到的吗?


当前回答

我会这样做;

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来选择特定的提交。

快乐旅行:)

其他回答

更新:网页

你也可以通过github网页做到这一点。

我假设,您应该已经有一个通用回购(BaseRepo)的fork (MyFork),它有来自您感兴趣的fork (OtherFork)的未决拉请求。

导航到fork (OtherFork),它已经启动了你想要进入你的fork (MyFork)的拉请求 进入OtherFork的pull requests页面 点击新的拉请求 应该提供挂起的拉请求。记住要选择合适的OtherFork分支。选择左边作为基础叉你的叉(MyFork)(重要)。 现在查看拉请求的选项应该更改为创建拉请求。点击这个。

现在你的fork (MyFork)中应该有一个未决的拉请求,你可以简单地接受它。

就像Tekkub之前说的,你可以直接把分支拉进去。在GitHub的大多数情况下,分支只是请求用户的项目分支的“主”。

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

举个实际的例子:

假设你fork了一个名为safaribooks的github项目,在初始项目中有以下拉请求,你想把它放在你的fork中:

然后,在fork的克隆项目文件夹中,运行:

git pull https://github.com/fermionic/safaribooks.git fix-str-decode

我会这样做;

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来选择特定的提交。

快乐旅行:)

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

我的.git/配置文件分叉回购看起来像这样:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "origin"]
        url = git@github.com: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”,然后列出来自fork repo的所有拉请求。

 * [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

然后在一个特定的pull请求中合并运行"git merge master origin/pr/67"

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

步骤1:

git remote add upstream <url>

您可能已经完成了这一步,但如果没有,您将需要为上游项目定义一个远程。URL是你分叉的项目的克隆URL。更多信息请参见配置一个fork的远程和同步一个fork。Upstream是为远程提供的名称,虽然它可以是任何名称,但Upstream是常规名称。

步骤2:

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

... 其中{id}是拉请求号。Upstream是要拉动的遥控器的名称,也就是说,如果您完全按照第1步进行操作,则仅为“Upstream”。它也可以是一个URL,在这种情况下,您可以跳过步骤1。

步骤3:

输入合并提交的提交消息。你可以保持默认值,尽管我建议给出一个漂亮的一行摘要,包括拉请求号,它修复的问题,以及一个简短的描述:

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