我需要在NServiceBus repo中提取一个特定的pull请求(尚未处理到主流中):
https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15
这显然不是我的回购,但我需要拉动请求中存在的更改。
这样做的最佳方式是什么?
答案 0 :(得分:69)
要获取存储库中的内容:
git fetch git@github.com:jboss/jboss-common-beans.git refs/pull/4/head
然后用FETCH_HEAD做任何你想做的事:
git checkout -b new-branch FETCH_HEAD
答案 1 :(得分:53)
git pull origin pull/28/head
或者
git fetch origin pull/28/head:28
git checkout 28
答案 2 :(得分:17)
你可以这样做:
1)添加上游远程:
git remote add upstream git@github.com:Particular/NServiceBus.git
2)之后,您可以根据其ID检查对新分支的任何拉取请求:
git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME
然后您将拥有一个名为NEW_BRANCH_NAME
的分支,其中包含PR代码。
如果您像我一样经常这样做,您可能需要为此设置some aliases。 我在.gitconfig中有这个:
[alias]
fetch-pr = "!f(){\
[ -z \"$1\" ] && { echo Usage: git fetch-pr PULL_REQUEST_ID [REMOTE_NAME] [NEW_BRANCH_NAME]; exit 1; }; \
remote=${2:-origin}; \
branch=${3:-pr-$1}; \
git fetch $remote \"pull/$1/head:$branch\"; \
}; f "
pr = "!f(){\
branch=${3:-pr-$1}; \
git fetch-pr \"$@\"; \
git switch $branch; \
}; f "
有了上述内容,我可以做到:
git fetch-pr 123 # fetch PR #123 into branch pr-123
git fetch-pr 123 some-branch # fetch PR #123 into some-branch
git pr 123 # fetch and switch to the branch
答案 3 :(得分:8)
对于困难的情况(特别是如果你没有签出git-repo),我认为最简单的方法是应用补丁。为此,只需在github上打开pull-request并在URL中添加“.patch”,下载并应用补丁。
示例:
cd cordova-plugin-media
wget https://github.com/apache/cordova-plugin-media/pull/120.patch
patch -p1 < 120.patch
答案 4 :(得分:5)
请参阅GitHub上的这篇帮助文章:https://help.github.com/articles/checking-out-pull-requests-locally
答案 5 :(得分:4)
<强>的github /集线器强>
https://github.com/github/hub是一个GitHub CLI帮助程序,可以使用GitHub API中的额外信息精确地处理此用例和其他用例。 E.g:
git clone https://github.com/github/hub
# Just copy paste the URL.
hub checkout https://github.com/github/hub/pull/970
结果:
我们现在位于名为<USERID>-<BRANCH_NAME>
的分支上,其中包含PR。
请注意为我们自动设置的好分支名称。
该分支设置为跟踪分叉上的原始分支,即.git/config
包含:
[branch "<USERID>-<BRANCH_NAME>"]
remote = retronym
merge = refs/heads/ticket/969
rebase = true
因此,如果进一步提交,我们可以直接git fetch
。
如果你不熟悉Go,那么在Linux上安装hub
是一件很痛苦的事情,但是值得。在Ubuntu 14.04上,存储库中的Go太旧了,因此GVM是最佳选择:
bash < <(curl -LSs 'https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer')
. "$HOME/.gvm/scripts/gvm"
gvm install 'go1.4'
gvm use 'go1.4' --default
go get github.com/github/hub
我还要求GitHub在网页用户界面上给我们一份复制粘贴备忘单:https://github.com/isaacs/github/issues/449
答案 6 :(得分:3)
将上游仓库添加为上游远程(如@elias指出):
$ git remote add upstream git@github.com:Particular/NServiceBus
默认情况下,您可以将git配置为获取拉取请求:
$ git config --local --add remote.upstream.fetch '+refs/pull/*/head:refs/remotes/upstream/pr/*'
所以,让我们来取它:
$ git fetch upstream
Fetching upstream
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/Particular/NServiceBus
* [new ref] refs/pull/1/head -> upstream/pr/1
* [new ref] refs/pull/2/head -> upstream/pr/2
并查看:
$ git checkout pr/2
Branch pr/2 set up to track remote branch pr/2 from upstream.
Switched to a new branch 'pr/2'
答案 7 :(得分:0)
下面是让你的'git fetch'命令在运行“git fetch”时获取所有拉取请求
将以下内容添加到〜/ .gitconfig
中[remote "origin"]
fetch = +refs/pull-requests/*/from:refs/remotes/origin/pr/*
注意引用“refs / pull-requests /”有stash命名约定,对于git hub,你可能需要不同的格式
答案 8 :(得分:0)
如果您只想将其他回购中的一个未合并的“拉取请求”添加到自己的回购请求中, 并不需要所有并发症(如其他答案所示)。
相反,只需进入自己的存储库,并使用其提交哈希值(从PR来源)提取提交即可。
git pull https://bitbucket.org/SomeUser/SomeProjectRepo/commits/c15...db2
通过这种方式,您将只有一堆新的编辑文件,就像您自己编辑它们一样。如果您要提交这些标签/标签,则由您决定。
如果您随后想要将所有新闻推送到自己的GitHub存储库中,请像往常一样执行:
git commit -m "Added something by Anonymous"
git push -u origin master
答案 9 :(得分:0)
这是对我有用的命令。
我假设一个人已经在本地将一个仓库(例如pytorch)克隆到他/她的系统中。此后,一些志愿者/热心者贡献了一些代码并向远程存储库发布了PR,但它尚未合并到主数据库或任何其他分支中。因此,
首先,我们必须对github远程存储库进行 git remote add
:
# I've given the name `original`; you can give some other name as per your liking
$ git remote add original https://github.com/pytorch/pytorch
然后cd
进入存储库pytorch
,然后只需执行以下操作:
# after this, the unmerged PR should be pulled to your local repo
$ git fetch original pull/<pull_number>/head # 23, 123 etc.,
现在,待处理的PR已获取到您的本地存储库中,并且获取的提示将在FETCH_HEAD中。如果您要在本地合并此待处理的PR ,只需执行以下操作:
$ git merge FETCH_HEAD
在此之后,如果您这样做:
$ git status
您应该能够看到本地回购在作为待处理PR的n
提交之前(即,在一个PR中可以发出1个以上的提交)。因此,提交的数量取决于挂起的PR中包含的提交。
答案 10 :(得分:0)
Github有明确的文档,用于将拉取请求合并到 local 回购中:
https://help.github.com/en/articles/checking-out-pull-requests-locally
可以归结为知道GitHub中的拉取请求只是基础存储库中的分支,其中分支名称是序列号。上面的文章向您展示了如何找到该数字以及git命令行魔术师如何使用您想要的任何分支名称将其拉入本地存储库。
我找不到类似的简单方法将拉取请求合并到我在GitHub上创建的fork中。
答案 11 :(得分:0)
我找到了解决此问题的方法-从不同机器上未合并的PR中提取更改,我在git bash上进行了以下操作 1.您必须已在机器2上克隆了远程存储库 2.进行git checkout(生成PR的分支) 3.做git pull 并完成!!!!!!!!!!!!!!
答案 12 :(得分:0)
这是GitHub文档中的解决方案:
从您的项目存储库中,签出一个新分支并测试更改。
git checkout -b GithubUserID-branchName branchName
git pull https://github.com/GithubUserID/reponame.git branchName
位置:
GithubUserID
是打开请求请求的人的用户名。branchName
是分支的名称,例如master reponame
存储库名称,例如demo-todo 示例:
git checkout -b felix123-master master
git pull https://github.com/felix123/demo-todo.git master