假设我在我们受祝福的存储库的分支master
本地。有人发出拉动请求。
如何在我的本地分支上应用该pull请求的提交 - 好像这些提交在我的分支上被重新命名 - 在一个命令中?
注意:拉取请求已有好几天了,而且我的本地分支已经创建了拉取请求以来有新的提交。
答案 0 :(得分:6)
首先必须获取隐藏的pull请求引用,并将其放在pr/NNN
远程分支下:
git fetch origin refs/pull/1234/head:refs/remotes/pr/1234
(用拉取请求号替换1234
)
在此之后它只是一个经典的rebase:检查pull请求,并在你的master
分支上重新绑定它:
git checkout pr/1234
git rebase master
或者
git rebase master pr/1234
你当然可以看到冲突。
现在,拉取请求已在master
上重新定位,并且是当前分支。如果你想更新master只需合并pull请求(我们说--ff-only
因为我们知道它将是一个快进合并):
git checkout master
git merge --ff-only pr/1234
要获得一行内容,需要一些shell别名,这只是脚本问题:)
答案 1 :(得分:1)
好的,这个单行将在拉取请求之上重新设置你的提交(这与你想要的相反;请参阅我的其他答案):
git pull --rebase origin pull/NNN/head
其中NNN
是拉取请求编号。假设origin
是您本地仓库中的Github远程,并且master
已签出。
Explanation here:Github在origin
仓库中存储来自pull/NNN
仓库的其他货品的拉取请求。这是允许在其上运行pull --rebase
的原因。
答案 2 :(得分:0)
安装hub
# directly apply all commits from a pull request to the current branch
$ git am -3 https://github.com/github/hub/pull/134
TODO:需要弄清楚如何强制使用--rebase