我在 GitHub 上 fork 了一个项目,但该项目有一个新的 pull request 尚未被作者合并,我希望将其合并到我的 fork 中。
有没有简单的方法将其他 fork 的 pull request 合并到我的 fork 中?还有其他需要注意的地方吗?
我在 GitHub 上 fork 了一个项目,但该项目有一个新的 pull request 尚未被作者合并,我希望将其合并到我的 fork 中。
有没有简单的方法将其他 fork 的 pull request 合并到我的 fork 中?还有其他需要注意的地方吗?
您也可以通过Github网页进行此操作。
我假设您已经拥有一个基于共同仓库(BaseRepo
)的分支(MyFork
),而该分支中包含您感兴趣的来自另一个分支(OtherFork
)的拉取请求。
MyFork
)中的发起拉取请求的分支(OtherFork
)OtherFork
的拉取请求页面OtherFork
分支。在左侧作为基础库选择您的分支(MyFork
)(重要)。查看拉取请求
选项应更改为创建拉取请求
。单击此选项。现在,您应该在您的分支(MyFork
)中有一个待处理的拉取请求,您可以轻松地接受它。
OtherFork
创建的拉取请求对应的分支。然后,我如上所述选择左侧作为基础分支,并成功创建了拉取请求。 - seddonym将另一个分支作为您的仓库的远程仓库添加:
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
命令。 - Tekkubgit merge
。 - JonnyJDgit pull https://github.com/{upstream/project} refs/pull/{id}/head
。 - jbyler该项目的拉取请求可能来自许多不同的作者(分支),你可能不希望为每个分支创建一个单独的远程分支。此外,您不想对提交拉取请求时作者使用的分支或作者主分支中可能存在的其他内容作出任何假设。因此,最好按照上游存储库中显示的方式引用拉取请求,而不是按照其他分支中显示的方式。
步骤1:
git remote add upstream <url>
你可能已经完成了这一步,但如果没有,请为上游项目定义一个远程。URL 是你 fork 的项目的克隆 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
git pull upstream refs/pull/{id}/head
将提交获取到本地仓库,然后将其引用为FETCH_HEAD
(例如,git log ..FETCH_HEAD
查看其中的内容,然后git merge FETCH_HEAD
)。 - jbyler以下是对我有用的更详细信息。
我的fork后的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 requests。
* [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”
我会采取以下措施:
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 prfetch upstream
它会获取来自上游分支的所有拉取请求。
要创建脚本,请创建一个名为~/bin/git-prfetch
的文件。
该文件应包含以下内容:
Original Answer翻译成"最初的回答"。
#!/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/\*
通过设置确保你的路径包括脚本:
将"Original Answer"翻译成中文是"最初的回答"
export PATH="$HOME/bin:$PATH"
~/.bashrc
中,以使更改生效。
现在,请确保你添加了你想要从中获取拉取请求的分支:
git remote add upstream https://github.com/user/repo.git
And then
git prfetch upstream