5

假设我在master我们的祝福存储库的本地分支上。有人发送了拉取请求。

如何在一个命令中将该拉取请求的提交应用到我的本地分支之上——就好像这些提交是基于我的分支重新建立的一样?

注意:拉取请求是几天前的,自拉取请求创建以来,我的本地分支有新的提交。

4

3 回答 3

6

有一篇很棒的博文,来自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 别名,这只是脚本的问题 :)

于 2013-07-11T16:26:29.663 回答
1

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.

于 2013-07-12T08:22:12.893 回答
0

安装集线器

# directly apply all commits from a pull request to the current branch
$ git am -3 https://github.com/github/hub/pull/134

TODO:需要弄清楚如何强制执行 --rebase

于 2013-08-13T14:21:22.117 回答