GitHub上的一个项目,我有一个fork,它有一个新的pull请求,我想把它拉到我的fork中,但作者还没有拉进去。
有一个简单的方法来应用从其他叉子的拉请求到我的叉子?这里还有什么我没注意到的吗?
GitHub上的一个项目,我有一个fork,它有一个新的pull请求,我想把它拉到我的fork中,但作者还没有拉进去。
有一个简单的方法来应用从其他叉子的拉请求到我的叉子?这里还有什么我没注意到的吗?
当前回答
为此,我使用了一个方便的脚本。我运行脚本输入:
git prfetch upstream
它从上游fork获得所有的pull请求。
要创建脚本,创建一个文件~/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使这一变化永久化。
现在,确保你添加了你想要获得pull请求的fork:
git remote add upstream https://github.com/user/repo.git
然后
git prfetch upstream
其他回答
就像Tekkub之前说的,你可以直接把分支拉进去。在GitHub的大多数情况下,分支只是请求用户的项目分支的“主”。
示例:git拉https://github.com/USER/PROJECT/ BRANCH
举个实际的例子:
假设你fork了一个名为safaribooks的github项目,在初始项目中有以下拉请求,你想把它放在你的fork中:
然后,在fork的克隆项目文件夹中,运行:
git pull https://github.com/fermionic/safaribooks.git fix-str-decode
我会这样做;
git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#
现在,我已经将更改合并到一个名为test_fork的测试分支中。这样任何改变都不会弄脏树。
如果更可取的话,还可以像上面描述的那样使用cherry-pick来选择特定的提交。
快乐旅行:)
一些对我有用的更详细的信息。
我的.git/配置文件分叉回购看起来像这样:
[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”,然后列出来自fork repo的所有拉请求。
* [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
然后在一个特定的pull请求中合并运行"git merge master origin/pr/67"
更新:网页
你也可以通过github网页做到这一点。
我假设,您应该已经有一个通用回购(BaseRepo)的fork (MyFork),它有来自您感兴趣的fork (OtherFork)的未决拉请求。
导航到fork (OtherFork),它已经启动了你想要进入你的fork (MyFork)的拉请求 进入OtherFork的pull requests页面 点击新的拉请求 应该提供挂起的拉请求。记住要选择合适的OtherFork分支。选择左边作为基础叉你的叉(MyFork)(重要)。 现在查看拉请求的选项应该更改为创建拉请求。点击这个。
现在你的fork (MyFork)中应该有一个未决的拉请求,你可以简单地接受它。
项目的Pull请求可能来自许多不同的作者(fork),您可能不希望每个fork都有一个单独的远程服务器。此外,您不希望对作者在提交pull请求时使用的分支做出任何假设,也不希望对作者的主分支中可能存在的其他内容做出任何假设。因此,最好在上游存储库中引用拉请求,而不是在其他分支中引用它。
步骤1:
git remote add upstream <url>
您可能已经完成了这一步,但如果没有,您将需要为上游项目定义一个远程。URL是你分叉的项目的克隆URL。更多信息请参见配置一个fork的远程和同步一个fork。Upstream是为远程提供的名称,虽然它可以是任何名称,但Upstream是常规名称。
步骤2:
git pull upstream refs/pull/{id}/head
... 其中{id}是拉请求号。Upstream是要拉动的遥控器的名称,也就是说,如果您完全按照第1步进行操作,则仅为“Upstream”。它也可以是一个URL,在这种情况下,您可以跳过步骤1。
步骤3:
输入合并提交的提交消息。你可以保持默认值,尽管我建议给出一个漂亮的一行摘要,包括拉请求号,它修复的问题,以及一个简短的描述:
Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions