在我较新的本地提交之上重新启动GitHub拉取请求

时间:2013-06-26 08:33:32

标签: git github rebase pull-request

假设我在我们受祝福的存储库的分支master本地。有人发出拉动请求。

如何在我的本地分支上应用该pull请求的提交 - 好像这些提交在我的分支上被重新命名 - 在一个命令中?

注意:拉取请求已有好几天了,而且我的本地分支已经创建了拉取请求以来有新的提交。

3 个答案:

答案 0 :(得分:6)

来自great blog post

的主题有一个Igor Zevaka

首先必须获取隐藏的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已签出。

Douglas Stuarts博客上的

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