【问题标题】:GitHub: How to add open pull requests to local repo?GitHub:如何将开放的拉取请求添加到本地仓库?
【发布时间】:2012-02-12 01:30:37
【问题描述】:

我在我的 iOS Xcode 项目中使用NSDate-Extensions 插件。主仓库有一些错误,似乎在两个拉取请求中得到了修复:

这些请求仍然是开放的,不被主仓库接受。如何以 Git 方式将这些添加到我的本地存储库中?如果我的本地 repo 得到更新,如果他们的 Fork 稍后更新,那会很好:

【问题讨论】:

标签: git github


【解决方案1】:

您可以在不添加遥控器的情况下从命令行拉取请求:

git pull https://github.com/erica/NSDate-Extensions +refs/pull/6/head

如果您还不确定是否要这样做,那么您可能需要先检查该分支:

git fetch https://github.com/erica/NSDate-Extensions +refs/pull/6/head:refs/origin/pull/6

与使用补丁文件相比,这样做的好处是 git 可以获得实际的提交。所以 git 可以看到 master 之前何时合并到 pull request 中。补丁文件完全不知道这些差异。

【讨论】:

    【解决方案2】:

    您可以像这样拉取特定的拉取请求:

    git pull https://github.com/erica/NSDate-Extensions/pull/6
    git pull https://github.com/erica/NSDate-Extensions/pull/7
    

    imo 这比添加遥控器(特别是当它只是一次性修复时)或通过 curl 管道要容易得多。

    【讨论】:

    • 这个想法是正确的,但它并不像那样工作,这可能是downvote的原因。我在stackoverflow.com/a/18096344/1904815添加了一个具有相同想法的工作答案)
    【解决方案3】:

    您应该添加提供拉取请求的分叉,并将它们添加为远程:

    • 找到提供链接的人(通常只需单击 sha1 哈希)

    • 做一些类似的事情:

      git remote add githubuser theirgithubfork.git

    然后你就可以轻松拉下他们的改动:

    • git fetch githubuser

    使用“轻松进行单个提交”

    • git cherry-pick thesha1fromthepullrequest

    举个完整的例子,想象一下this pull request (6bbbcc5) from RogerE on the Ruby Capistrano project

    $ git clone git@github.com:capistrano/capistrano.git
    $ cd capistrano
    $ git remote add RogerE https://github.com/RogerE/capistrano.git
    $ git fetch RogerE
    $ git cherry-pick 6bbbcc5

    【讨论】:

    • 所以我应该从 erica 克隆原始存储库,并为 Ricardo1980 的两个分支运行“git remote add”并提升?如果我之后做一个“git pull”,它会从原始仓库中提取——还是会从两个遥控器中提取更新?
    • 为什么你们都做一个提取然后再挑选一个樱桃? fetch 不会全部从遥控器拉下来吗?
    • git pull 将从原始存储库中提取。您可以通过指定远程名称和 refspec 来指定要从哪个存储库中提取。例如git pull RogerE master.
    • git fetch 只会下载更改但实际上不会合并它,直到您指定合并它们的命令,例如git mergegit rebase.
    • 好的,所以没有办法使用单个 pull 命令同时从三个 repos 获取更新?
    【解决方案4】:

    在拉取 URL 的末尾添加 .patch - 您可以下载补丁并将其应用到您的存储库中:

    curl https://github.com/erica/NSDate-Extensions/pull/6.patch | git am
    

    【讨论】:

    • 完成上述命令后,补丁成功应用,但是当我运行git status 时,它说没有任何更改。为什么这个补丁可以改变我的本地repo,仍然说没有任何变化?
    • @manojlds:好把戏!你的回答也适用于stackoverflow.com/questions/6022302/…
    • @DennisMadsen: git am只是应用补丁。 pull/*.patch 实际上是多个补丁(在拉取请求中每个提交一个)并且每个补丁都作为提交应用。所以在那之后没有未提交的更改(git状态可以显示)。
    • 这仅适用于从未合并来自 master 的提交的简单拉取请求。出于这个原因,我总是更喜欢使用实际的拉取请求分支,如stackoverflow.com/a/18096344/1904815
    • 看起来 GitHub 发生了一些变化。该网址只是指向https://patch-diff.githubusercontent.com/raw/erica/NSDate-Extensions/pull/6.patch 的重定向/链接。不过,替换新的 url 是可行的。
    猜你喜欢
    • 2012-12-11
    • 2021-07-20
    • 2013-08-14
    • 2018-09-29
    • 2021-04-07
    • 2018-06-27
    • 2021-11-14
    • 2012-08-01
    • 2023-01-13
    相关资源
    最近更新 更多