我在我的iOS Xcode项目中使用NSDate-Extensions插件。主分支存在一些错误,这些错误看起来在两个拉取请求中已经得到修复:
这些请求仍然是未解决的,没有被接受到主分支。如何以Git方式将它们添加到我的本地存储库?如果他们的分支稍后更新,那么我的本地存储库会跟着更新就好了:
我在我的iOS Xcode项目中使用NSDate-Extensions插件。主分支存在一些错误,这些错误看起来在两个拉取请求中已经得到修复:
这些请求仍然是未解决的,没有被接受到主分支。如何以Git方式将它们添加到我的本地存储库?如果他们的分支稍后更新,那么我的本地存储库会跟着更新就好了:
您可以从命令行中拉取请求而无需添加远程仓库:
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可以看到主分支之前何时已经合并到拉取请求中。而补丁文件则完全没有意识到这种差异。
在拉取的URL末尾添加一个.patch
- 您可以下载并将补丁应用于您的repo:
curl https://github.com/erica/NSDate-Extensions/pull/6.patch | git am
git status
时,它说没有任何更改。为什么这个补丁可以改变我的本地仓库,但仍然说没有任何更改? - dhrmgit am
不仅仅是应用补丁。pull / *.patch 实际上是多个补丁(每个拉取请求中的提交一个)。每个补丁都被应用为提交。因此,在此之后没有未提交的更改(git status 可能会显示)。 - JonnyJDhttps://patch-diff.githubusercontent.com/raw/erica/NSDate-Extensions/pull/6.patch
。不过,替换成新的 URL 就可以了。 - Sparhawkcurl -L
来跟随重定向。 - Soren Bjornstad您应该将提出拉取请求的仓库添加为远程仓库:
找到贡献此链接的人(通常只需单击sha1哈希)
执行以下操作:
git remote add githubuser theirgithubfork.git
然后你可以轻松地拉取他们的更改:
git fetch githubuser
轻松获取单个提交记录。
git cherry-pick thesha1fromthepullrequest
举个完整的例子,可以想象一下 Ruby Capistrano 项目中由 RogerE 提交的 pull request (6bbbcc5
),具体可以参考这个链接。
$ 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 fetch
只会下载更改,但在您指定合并命令(例如 git merge
或 git rebase
)之前不会实际合并它们。 - Ramon Marco L. Navarrofetch
(下载提交)所有存储库。然后选择要使用的提交 cherry-pick
。Cherry-pick 会保留提交的作者和 SHA1
哈希值。如果 origin
存储库将它们合并到主分支中,按照这种方式工作就不会出现合并冲突问题。 - Lee Hambleygit pull
命令时,实际上默认会扩展为 git pull origin master
。在你的例子中,你的 origin
远程是 erica
。因此,当你执行 git pull
命令时,你会从 erica
拉取 master 分支。远程仓库并没有参与其中,这是设计上的考虑。 - Lee Hambley你可以这样拉取特定的拉请求:
git pull https://github.com/erica/NSDate-Extensions/pull/6
git pull https://github.com/erica/NSDate-Extensions/pull/7
我认为这比添加远程(特别是仅需要一次性修复)或通过curl管道传输要容易得多。