假设我在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