GitHub上的一个项目,我有一个新的拉动请求,我想把它拉到我的叉子中,而作者还没有进入。
有没有一种简单的方法可以将其他叉子的拉取请求应用到我的叉子中?这里还有别的东西我不见了吗?
答案 0 :(得分:260)
你可以很容易地手动完成:
将另一个分支添加为您的仓库的远程:
git remote add otherfork git://github.com/request-author/project.git
获取他的回购提交
git fetch otherfork
您有两个选项可以应用拉取请求(如果您不想选择选择1。)
如果您不关心还应用在origin和pull请求之间添加的最终提交,您可以重新设置形成pull请求的分支
git rebase master otherfork/pullrequest-branch
如果您只想要拉取请求中的提交,请标识其SHA1并执行
git cherry-pick <first-SHA1> <second-SHA1> <etc.>
答案 1 :(得分:246)
您也可以通过github网页进行此操作。
我假设你应该已经拥有了一个普通仓库(MyFork
)的分叉(BaseRepo
),它有一个你感兴趣的分叉(OtherFork
)的挂起拉取请求
OtherFork
),您希望进入分叉(MyFork
)OtherFork
OtherFork
分支。选择左侧作为叉子的基叉(MyFork
)(重要)。View pull request
的选项应更改为Create pull request
。点击这个。现在你应该在你的分叉(MyFork
)中有一个待处理的拉取请求,你可以接受。
答案 2 :(得分:67)
就像Tekkub先前所说的那样,你可以直接拉入分支机构。大部分时间使用GitHub,分支在请求用户的项目分支上只是“主”。
示例:git pull https://github.com/USER/PROJECT/ BRANCH
答案 3 :(得分:19)
一些对我有用的详细信息。
forked repo的.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”,然后列出forked repo中的所有pull请求。
* [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”
答案 4 :(得分:19)
对项目的拉取请求可能来自许多不同的作者(分叉),并且您可能不希望每个分支都有一个单独的远程。此外,您不希望对提交拉取请求时作者使用的分支做出任何假设,或者作者的主分支中可能还有其他内容。因此,最好引用上游存储库中出现的pull请求,而不是它在其他分支中出现的那样。
第1步:
git remote add upstream <url>
您可能已经完成了此步骤,但如果没有,您将需要为上游项目定义远程。 URL是您分叉的项目的克隆URL。有关Configuring a remote for a fork和Syncing a fork的更多信息。 upstream
是您为遥控器提供的名称,虽然它可以是任何名称,upstream
是常规名称。
第2步:
git pull upstream refs/pull/{id}/head
...其中{id}
是拉取请求编号。 upstream
是要从中拉出的遥控器的名称,即上游&#34;如果你完全按照步骤1。它也可以是一个URL,在这种情况下,您可以跳过第1步。
第3步:
键入合并提交的提交消息。您可以保留默认值,但我建议您提供一个很好的单行摘要,其中包含拉取请求编号,修复的问题以及简短描述:
Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
答案 5 :(得分:9)
我将做的是以下内容;
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来选择特定的提交。
快乐旅行:)
答案 6 :(得分:0)
为此,我使用了方便的花花公子脚本。我通过键入以下内容来运行脚本:
\r\n
并从上游分叉获取所有拉取请求。
要创建脚本,请创建文件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