【发布时间】:2012-02-12 01:30:37
【问题描述】:
我在我的 iOS Xcode 项目中使用NSDate-Extensions 插件。主仓库有一些错误,似乎在两个拉取请求中得到了修复:
这些请求仍然是开放的,不被主仓库接受。如何以 Git 方式将这些添加到我的本地存储库中?如果我的本地 repo 得到更新,如果他们的 Fork 稍后更新,那会很好:
【问题讨论】:
我在我的 iOS Xcode 项目中使用NSDate-Extensions 插件。主仓库有一些错误,似乎在两个拉取请求中得到了修复:
这些请求仍然是开放的,不被主仓库接受。如何以 Git 方式将这些添加到我的本地存储库中?如果我的本地 repo 得到更新,如果他们的 Fork 稍后更新,那会很好:
【问题讨论】:
您可以在不添加遥控器的情况下从命令行拉取请求:
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 中。补丁文件完全不知道这些差异。
【讨论】:
您可以像这样拉取特定的拉取请求:
git pull https://github.com/erica/NSDate-Extensions/pull/6
git pull https://github.com/erica/NSDate-Extensions/pull/7
imo 这比添加遥控器(特别是当它只是一次性修复时)或通过 curl 管道要容易得多。
【讨论】:
您应该添加提供拉取请求的分叉,并将它们添加为远程:
找到提供链接的人(通常只需单击 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
【讨论】:
git pull 将从原始存储库中提取。您可以通过指定远程名称和 refspec 来指定要从哪个存储库中提取。例如git pull RogerE master.
git fetch 只会下载更改但实际上不会合并它,直到您指定合并它们的命令,例如git merge 或 git rebase.
在拉取 URL 的末尾添加 .patch - 您可以下载补丁并将其应用到您的存储库中:
curl https://github.com/erica/NSDate-Extensions/pull/6.patch | git am
【讨论】:
git status 时,它说没有任何更改。为什么这个补丁可以改变我的本地repo,仍然说没有任何变化?
git am 不不只是应用补丁。 pull/*.patch 实际上是多个补丁(在拉取请求中每个提交一个)并且每个补丁都作为提交应用。所以在那之后没有未提交的更改(git状态可以显示)。
https://patch-diff.githubusercontent.com/raw/erica/NSDate-Extensions/pull/6.patch 的重定向/链接。不过,替换新的 url 是可行的。