我想查看之前创建的拉取请求(通过GitHub网络界面创建)。我搜索并找到了refs / pull或refs / pull / pr
的不同地方但是当我将fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
添加到git配置文件并执行git fetch
我做错了什么? GitHub应该自动创建pull / xyz内容,还是我必须配置什么?
答案 0 :(得分:246)
要将远程PR提取到本地仓库,
git fetch origin pull/ID/head:BRANCHNAME
其中ID
是拉取请求ID,BRANCHNAME
是您要创建的新分支的名称。一旦你创建了分支,那么只需
git checkout BRANCHNAME
有关详情,请参阅official GitHub documentation。
答案 1 :(得分:98)
答案 2 :(得分:43)
That gist确实描述了执行git fetch时发生的事情:
显然,更改github网址以匹配您项目的网址。最终看起来像这样:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:joyent/node.git
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
现在获取所有拉取请求:
$ git fetch origin
From github.com:joyent/node
* [new ref] refs/pull/1000/head -> origin/pr/1000
* [new ref] refs/pull/1002/head -> origin/pr/1002
* [new ref] refs/pull/1004/head -> origin/pr/1004
* [new ref] refs/pull/1009/head -> origin/pr/1009
...
检查特定的提款请求:
$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'
issues 259中列出了各种脚本以自动执行该任务
git-extras 项目提出了git-pr
命令(在PR 262中实施)
git-pr
(1) - 在本地检查拉取请求概要
git-pr <number> [<remote>]
git-pr clean
描述
根据GitHub拉取请求编号创建本地分支,然后切换到该分支。
要获取的遥控器的名称。默认为
origin
。实施例
这会从
中检出提取请求226
origin
$ git pr 226
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
* [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'
答案 3 :(得分:25)
我更喜欢在不创建本地分支的情况下获取和签出并且处于 HEAD分离状态。它允许我快速检查拉取请求,而不会使用不必要的本地分支机构污染本地计算机。
git fetch upstream pull/ID/head && git checkout FETCH_HEAD
其中ID
是拉取请求ID,upstream
其中原始拉取请求已创建(例如,可能是origin
。)
我希望它有所帮助。
答案 4 :(得分:11)
参考Steven Penny的回答,最好创建一个测试分支并测试PR。所以这就是你要做的。
git checkout -b test
git pull origin pull/939/head:test
现在,您可以安全地测试此本地测试分支上的更改(在本例中,命名为 test ),一旦您满意,就可以像往常一样从GitHub合并。
答案 5 :(得分:8)
Github最近发布了一个名为github-cli的cli实用程序。安装后,您可以使用其ID在本地检出请求请求的分支
例如:gh pr checkout 2267
答案 6 :(得分:8)
答案 7 :(得分:5)
123
和作者分支的名称-branch-name
。复制这两个。git status
git fetch upstream pull/<id>/head:<branch>
获取PR的副本。在此示例中,您将输入git fetch upstream pull/123/head:branch-name
git checkout branch-name
切换到该分支。现在,您的目录将是PR的精确副本。一定要告诉作者任何错误或建议,因为您不能直接将自己的更改添加到拉取请求中。git checkout master
返回到您的Project Porcupine的本地版本答案 8 :(得分:5)
您可以使用git config
命令将新规则写入.git/config
以从存储库中获取拉取请求:
$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'
然后只是:
$ git fetch origin
Fetching origin
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/container-images/memcached
* [new ref] refs/pull/2/head -> origin/pr/2
* [new ref] refs/pull/3/head -> origin/pr/3
答案 9 :(得分:4)
对于Bitbucket,您需要将pull
替换为pull-requests
。
首先,您可以通过git ls-remote origin
命令确认拉取请求URL样式。
$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e refs/pull-requests/1503/merge
...
如您所见,它是refs/pull-requests/1503/from
而不是refs/pull/1503/from
然后您可以使用任何答案的命令。
答案 10 :(得分:4)
我不小心写了几乎与git-extras提供的相同。因此,如果您更喜欢单个自定义命令而不是安装一堆其他额外命令,只需将this git-pr
file放在$PATH
的某处,然后您就可以写:
git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1
答案 11 :(得分:3)
如果你正在关注“github fork”工作流程,你可以在其中创建一个fork并添加远程上游repo:
14:47 $ git remote -v
origin git@github.com:<yourname>/<repo_name>.git (fetch)
origin git@github.com:<yourname>/<repo_name>.git (push)
upstream git@github.com:<repo_owrer>/<repo_name>.git (fetch)
upstream git@github.com:<repo_owner>/<repo_name>.git (push)
要进入当前分支,您的命令将如下所示:
git pull upstream pull/<pull_request_number>/head
进入一个新的分支代码看起来像:
git fetch upstream pull/<pull_request_number>/head:newbranch
答案 12 :(得分:3)
上面的一些选项存在的问题是,如果有人在打开PR后推送更多提交PR,他们就不会给你最新的版本。 对我来说最有效的方法是 - 转到公关,然后按“提交”,滚动到底部以查看最新的提交哈希 然后简单地使用git checkout,即
git checkout <commit number>
在上面的例子中
git checkout 0ba1a50
答案 13 :(得分:3)
使远程PR分支进入本地分支:
git fetch origin ‘remote_branch’:‘local_branch_name’
将本地分支的上游设置为远程分支。
git branch --set-upstream-to=origin/PR_Branch_Name local_branch
当您要将本地更改再次推送到PR分支
git push origin HEAD:remote_PR_Branch_name
答案 14 :(得分:0)
我正在使用集线器,它是github上的工具:https://github.com/github/hub
使用集线器在本地检出拉取请求很容易:
hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234
答案 15 :(得分:0)
假设您的来源和上游信息如下所示
$ git remote -v
origin git@github.com:<yourname>/<repo_name>.git (fetch)
origin git@github.com:<yourname>/<repo_name>.git (push)
upstream git@github.com:<repo_owner>/<repo_name>.git (fetch)
upstream git@github.com:<repo_owner>/<repo_name>.git (push)
您的分支名称类似于
<repo_owner>:<BranchName>
然后
git pull origin <BranchName>
应做
答案 16 :(得分:0)
检查 PR 并查看该 PR 的所有更改,与 VSCode 中的主分支相比。类似于 Github PR 页面的 files changed
部分。
结帐 PR (100) 处于“分离的 HEAD”状态
git fetch origin pull/100/head && git checkout FETCH_HEAD
显示为未提交的更改
git reset main
切换回主分支并进行这些更改
git switch -
答案 17 :(得分:0)
使用较新版本的 Git:
{{1}}
答案 18 :(得分:-1)
使用 git-cli 有一种简单的方法可以做到这一点
gh pr checkout {<number> | <url> | <branch>}
答案 19 :(得分:-1)
创建本地分支
git checkout -b local-branch-name
拉远程 PR
git pull git@github.com:your-repo-ssh.git remote-branch-name
答案 20 :(得分:-2)
如果他们的提交位于其分叉存储库的主分支上,那么您可以执行以下操作。
git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD