假设我在master
我们的祝福存储库的本地分支上。有人发送了拉取请求。
如何在一个命令中将该拉取请求的提交应用到我的本地分支之上——就好像这些提交是基于我的分支重新建立的一样?
注意:拉取请求是几天前的,自拉取请求创建以来,我的本地分支有新的提交。
假设我在master
我们的祝福存储库的本地分支上。有人发送了拉取请求。
如何在一个命令中将该拉取请求的提交应用到我的本地分支之上——就好像这些提交是基于我的分支重新建立的一样?
注意:拉取请求是几天前的,自拉取请求创建以来,我的本地分支有新的提交。
有一篇很棒的博文,来自Igor Zevaka
您首先必须获取隐藏的拉取请求引用,并将其放在pr/NNN
远程分支下:
git fetch origin refs/pull/1234/head:refs/remotes/pr/1234
(替换1234
为拉取请求编号)
在此之后,它只是一个经典的变基:检查拉取请求,并将其变基到您的master
分支:
git checkout pr/1234
git rebase master
或者
git rebase master pr/1234
您当然可能会看到冲突。
现在拉取请求基于master
,并且是当前分支。如果您想更新 master 只需合并拉取请求(我们说--ff-only
因为我们知道这将是一个快进合并):
git checkout master
git merge --ff-only pr/1234
要有一个单行,需要一些 shell 别名,这只是脚本的问题 :)
OK, this one-liner will rebase your commits on top of the pull request (which is the inverse of what you want; see my other answer):
git pull --rebase origin pull/NNN/head
Where NNN
is the pull request number. This assumes origin
is your Github remote on your local repo, and master
is checked out.
Explanation here on Douglas Stuarts' blog: Github stores pull requests from other forks in your origin
repo, under pull/NNN
. This is what allows to run pull --rebase
on it.
安装集线器
# directly apply all commits from a pull request to the current branch
$ git am -3 https://github.com/github/hub/pull/134
TODO:需要弄清楚如何强制执行 --rebase