我有一个分支的GitHub上的项目有一个新的pull请求,我想将其拉到作者尚未拉入的分支中。
有没有简单的方法可以将来自其他分叉的拉取请求应用于我的分叉?这里还有我想念的东西吗?
我有一个分支的GitHub上的项目有一个新的pull请求,我想将其拉到作者尚未拉入的分支中。
有没有简单的方法可以将来自其他分叉的拉取请求应用于我的分叉?这里还有我想念的东西吗?
Answers:
您可以很容易地手动进行操作:
将另一个fork添加为您的仓库的远程目录:
git remote add otherfork git://github.com/request-author/project.git
获取他的回购的承诺
git fetch otherfork
然后,您有两个选项可以应用拉取请求(如果您不想选择选择1)。
如果您不在乎还应用已在原始请求和请求请求之间添加的最终提交,则只需为形成请求请求的分支重新设置基础
git rebase master otherfork/pullrequest-branch
如果仅在提交请求中需要提交,请标识其SHA1并执行
git cherry-pick <first-SHA1> <second-SHA1> <etc.>
git pull URL branchname
您也可以通过github网页执行此操作。
我想,您应该已经有一个MyFork
公共仓库(BaseRepo
)的叉子(),其中有OtherFork
您感兴趣的来自叉子()的挂起请求。
OtherFork
发起了请求的派生叉(),您希望将其插入到派生叉(MyFork
)中OtherFork
OtherFork
分支。在左侧选择您的货叉(MyFork
)(重要)作为基础货叉。View pull request
应更改为Create pull request
。点击这个。现在,您应该在fork(MyFork
)中有一个待处理的pull请求,您可以简单地接受它。
OtherFork
从右侧的“比较”下拉列表中选择了与所提出的请求相对应的分支。然后,如上所述,如上所述,我选择左侧作为基叉,从而能够创建拉动请求。
就像Tekkub之前所说的,您可以直接将分支拉入。大多数情况下,使用GitHub时,分支只是项目的请求用户分支上的“主”。
例: git pull https://github.com/USER/PROJECT/ BRANCH
作为一个实际的例子:
假设您对一个名为safaribooks的github项目进行了分叉,并且在原始项目中有以下要放入您的fork的pull请求:
然后,在fork的克隆项目文件夹中,运行:
git pull https://github.com/fermionic/safaribooks.git fix-str-decode
git pull https://github.com/{upstream/project} refs/pull/{id}/head
单线。
该项目的请求请求可能来自许多不同的作者(分支),并且您可能不希望每个分支都有单独的遥控器。此外,您也不想对提交提交请求时作者使用的分支或作者的master分支中的其他内容进行任何假设。因此,最好参考在上游存储库中出现的拉取请求,而不是在其他派生中出现的引用。
步骤1:
git remote add upstream <url>
您可能已经完成了此步骤,但是如果没有,您将需要为上游项目定义一个远程。该URL是您分叉的项目的克隆URL。有关为分叉配置遥控器和同步分叉的更多信息。 upstream
是您为遥控器指定的名称,虽然可以是任何upstream
名称,但它 是常规名称。
第2步:
git pull upstream refs/pull/{id}/head
... {id}
提取请求编号在哪里。 upstream
是要从中拉出的遥控器的名称,即如果完全按照步骤1进行操作,则只是“上游”。它也可以是URL,在这种情况下,您可以跳过步骤1。
第三步:
输入用于合并提交的提交消息。您可以保留默认值,尽管我建议给出一个漂亮的单行摘要,其中包含拉取请求编号,它已解决的问题以及简短说明:
Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
git pull upstream refs/pull/{id}/head
用来将提交提交到本地存储库中,然后将其引用为FETCH_HEAD
(例如git log ..FETCH_HEAD
,查看其中的内容,然后git merge FETCH_HEAD
)
一些对我有用的更详细的信息。
我的分叉仓库的.git / config文件如下所示:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = git@github.com:litzinger/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "source"]
url = git://github.com/revolunet/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/source/*
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
然后运行“ git fetch source”,然后列出来自分叉存储库的所有拉取请求。
* [new ref] refs/pull/54/head -> origin/pr/54
* [new ref] refs/pull/67/head -> origin/pr/67
* [new ref] refs/pull/69/head -> origin/pr/69
* [new ref] refs/pull/71/head -> origin/pr/71
然后要合并到特定的请求请求中,请运行“ git merge master origin / pr / 67”
refs/pull/
命名空间的信息中找到出色的相关建议。。
smartgit.branch.otherRefs=notes;pull
按照syntevo.com/doc/display/SG/System+Properties添加到smartgit.properties中时,可以在日志图中看到这些拉取请求(和关闭的请求)-您也可以从那里合并它们。
我为此使用了方便的花花公子脚本。我通过键入以下命令运行脚本:
git prfetch upstream
并从上游分叉获取所有拉取请求。
要创建脚本,请创建一个文件~/bin/git-prfetch
。
该文件应包含以下内容:
#!/bin/bash
if [ -z "$1" ]; then
echo "Please supply the name of a remote to get pull requests from."
exit 1
fi
git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*
通过设置以下内容,确保您的路径包含脚本:
export PATH="$HOME/bin:$PATH"
您可以添加此文件~/.bashrc
以使更改永久生效。
现在,确保您添加了您要从中获取拉取请求的叉子:
git remote add upstream https://github.com/user/repo.git
然后
git prfetch upstream