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

lee*_*eek 445 git github pull-request

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

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

Cha*_*esB 271

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

  • 实际上,你不应该使用cherry-pick,它会创建新的提交......如果你向上游发送一个pull请求,这反过来会引起混淆.相反,你应该像拉请求要求那样合并.您也不需要添加遥控器.`git pull URL branchname` (161认同)
  • 是的,但在这种情况下,他特意询问如何将拉动请求拉入他的叉子.拉==合并. (8认同)
  • 对于那些分享我的精神故障的人,"otherfork"没有引用原始的repo,它引用了从*发出*pull请求到原始repo的fork的提交.忽略原始repo并直接转到发出pull请求的fork.您希望手动拉出pull引用的提交并将其与您自己的提交合并. (4认同)
  • @Tekkub:同意,避免与新创建的提交混淆可能会更好.合并在我的脑海中不那么优雅,因为你可以从你正在合并的分支中带来其他变化 (3认同)

Hot*_*hke 267

更新:通过网页

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

我假设你应该已经有一个MyFork普通repo(BaseRepo)的fork(),它有一个OtherFork你感兴趣的fork()的挂起请求.

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

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

  • 工作得很漂亮.比cmd线简单得多,并且易于查看更改.谢谢. (5认同)
  • 我很难找到如何在UI上找到"OtherFork".要轻松到达那里,只需使用github用户名修改url即可.即https://github.com/userName/repoName (3认同)
  • 我无法看到步骤4中提到的待处理拉取请求.相反,我从右侧'比较'下拉列表中选择了与'OtherFork`所做的拉取请求相对应的分支.然后我选择左侧作为基本分叉,如上所述,因为能够创建拉取请求. (2认同)
  • 除非没有叉子,否则有效。例如:https://github.com/OculusVR/RakNet/pull/61/files (2认同)

Sci*_*Phi 69

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

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

  • 除此之外,除了拉取请求之外,分支可能还有其他内容.此外,您必须查找拉请求作者的fork的正确URL.如果你想使用单行,最好使用`git pull https://github.com/{upstream/project} refs/pull/{id}/head`. (19认同)
  • @jbyler 如果分支中有其他东西,我很确定 GitHub 无论如何都会用它们更新拉取请求。 (4认同)

Bri*_*ger 20

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

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

[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/*
Run Code Online (Sandbox Code Playgroud)

然后运行"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
Run Code Online (Sandbox Code Playgroud)

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

  • 有关优秀的相关建议,请访问https://news.ycombinator.com/item?id=9051220和https://help.github.com/articles/checking-out-pull-requests-locally/提示(真棒) )GitHub特定的只读远程`refs/pull /`命名空间. (3认同)

jby*_*ler 19

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

步骤1:

git remote add upstream <url>
Run Code Online (Sandbox Code Playgroud)

您可能已经完成了这一步,但如果没有,您将需要为上游项目定义一个远程.URL是您分叉的项目的克隆URL.有关为fork配置远程同步fork的更多信息. upstream是你给遥控器的名字,虽然它可以是任何东西, upstream但是传统名称.

第2步:

git pull upstream refs/pull/{id}/head
Run Code Online (Sandbox Code Playgroud)

... {id}拉请求号在哪里. upstream是拉出的遥控器的名称,即如果您完全按照步骤1进行"上游".它也可以是一个URL,在这种情况下,您可以跳过步骤1.

第3步:

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

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
Run Code Online (Sandbox Code Playgroud)

  • 这是我需要的解决方案,因为 pull request 作者已经删除了他的 repo。 (2认同)

Min*_*oth 9

我要做的是以下几点;

git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#
Run Code Online (Sandbox Code Playgroud)

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

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

旅途愉快 :)