我想检查之前创建的拉请求(通过GitHub web界面创建)。我搜索了一下,发现不同的地方有裁判/拉或裁判/拉/pr
但当我添加fetch = +refs/pull/*/head:refs/remotes/origin/pr/*到git配置文件,并做一个git获取
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
我哪里做错了?GitHub应该自动创建拉/xyz东西,还是我必须配置一些东西?
这一要点描述了当你获取git时发生了什么:
显然,改变github的url,以匹配你的项目的url。结果是这样的:
[remote "origin"] url = git@github.com:joyent/node.git fetch = +refs/pull/*/head:refs/remotes/origin/pr/* fetch = +refs/heads/*:refs/remotes/origin/*
注意fetch refspecs的顺序,正如crashneb在他的自己的答案中所建议的那样。
fetch
如果不是,意思是如果你没有正确的顺序,因为:
git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*" ... ,然后相信PR-checkout会自然地用git switch pr/1之类的东西设置新的本地分支——那么如果PR更新了,而你想再次git pull它,你可能会遇到麻烦。 branch.pr/1.merge配置值将不正确
git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*" ...
,然后相信PR-checkout会自然地用git switch pr/1之类的东西设置新的本地分支——那么如果PR更新了,而你想再次git pull它,你可能会遇到麻烦。 branch.pr/1.merge配置值将不正确
git switch pr/1
git pull
branch.pr/1.merge
现在获取所有的pull请求: $ 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'
现在获取所有的pull请求:
$ 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'
git-pr
剧情简介 git-pr <number> [<remote>] git-pr clean 描述 根据GitHub拉请求号创建一个本地分支,然后切换到该分支。 要从中获取的远程的名称。默认为origin。 例子 这将检查出来自origin的拉请求226: $ 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'
git-pr <number> [<remote>] git-pr clean
根据GitHub拉请求号创建一个本地分支,然后切换到该分支。
要从中获取的远程的名称。默认为origin。
origin
这将检查出来自origin的拉请求226:
226
$ 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'
要获取远程PR到本地回购,
git fetch origin pull/$ID/head:$BRANCHNAME
其中$ID是拉请求id, $BRANCHNAME是你想要创建的新分支的名称。一旦您创建了分支,那么简单
$ID
$BRANCHNAME
git checkout $BRANCHNAME
例如,让我们想象一下,你想从源主分支签出拉请求#2:
git fetch origin pull/2/head:MASTER
更多信息请参见官方GitHub文档。
这将在你不需要命名分支的情况下获取:
git pull origin pull/939/head
我如何在我的机器上得到一个特定的拉请求?< / >
我不小心写了和git-extras提供的几乎一样的东西。因此,如果你更喜欢一个自定义命令,而不是安装一堆其他额外的命令,只需将这个git-pr文件放在你的$PATH中的某个地方,然后你可以这样写:
$PATH
git pr 42 // or git pr upstream 42 // or git pr https://github.com/peerigon/phridge/pull/1
如果你使用Github.com,去“拉请求”,点击相关的拉请求,然后点击“命令行指令”链接: < / p >
git checkout <commit number>
在上面的例子中
git checkout 0ba1a50
参考Steven Penny的回答,最好创建一个测试分支并测试PR。
git checkout -b test
git pull origin pull/939/head:test
现在,您可以安全地在这个本地测试分支上测试更改(在本例中,命名为测验),一旦您满意,就可以像往常一样从GitHub合并它。
你可以使用git config命令来写一个新的规则到.git/config来从存储库中获取拉请求:
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
我更喜欢获取和签出不需要创建本地分支,并在HEAD分离状态。它允许我快速检查拉取请求,而不会用不必要的本地分支污染本地机器。
git fetch upstream pull/ID/head && git checkout FETCH_HEAD
其中ID是一个拉请求ID,而upstream是已经创建的原始拉请求(例如,它可以是origin)。
ID
upstream
我希望这能有所帮助。
如果你遵循“github fork”工作流,在这里你创建了一个fork并添加了远程上游回购:
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
对于Bitbucket,你需要将单词pull替换为pull-requests。
pull
pull-requests
首先,您可以通过git ls-remote origin命令确认拉取请求URL样式。
git ls-remote origin
$ 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
refs/pull-requests/1503/from
refs/pull/1503/from
然后你可以使用任何答案的命令。
我正在使用hub,一个来自github: https://github.com/github/hub的工具
使用hub在本地检出一个pull请求有点容易:
hub checkout https://github.com/owner/repo/pull/1234 or hub pr checkout 1234
将远程公关分支机构导入本地分支机构:
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
假设你的起源和上游信息如下所示
$ 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>
应该做这项工作
Github最近发布了一个名为github-cli的cli实用程序。在安装它之后,你可以通过使用它的id (医生)在本地签出一个拉请求的分支。
例句:gh pr checkout 2267
gh pr checkout 2267
这也适用于fork,但如果你需要回推到fork,你将需要添加远程存储库并使用传统的git push(直到这个票在gh实用程序中实现)
git push
有一种使用git-cli的简单方法
gh pr checkout {<number> | <url> | <branch>}
参考:https://cli.github.com/manual/gh_pr_checkout
创建本地分支
git checkout -b local-branch-name
拉遥控器PR
git pull git@github.com:your-repo-ssh.git remote-branch-name
将PR和看到所有的变化从那个PR与VSCode中的主分支进行比较。类似于Github PR页面的files changed部分。
files changed
checkout PR (100) in 'detached HEAD' state git fetch origin pull/100/head && git checkout FETCH_HEAD < / p >
git fetch origin pull/100/head && git checkout FETCH_HEAD
显示为未提交的更改 git reset main < / p >
git reset main
切换回主分支并携带这些更改 git switch - < / p >
git switch -
在更新版本的Git中:
git fetch origin refs/pull-requests/<id>/from:<localbranchname>
要快速检查本地的PR,请打开它并检查从中创建PR的分支名称。
正如我们在上面的红线中看到的,分支的名称是'CLUPET-173-glrr-apis' 使用以下命令快速查看PR/Branch
git checkout origin/CLUPET-173-glrr-apis
现在这段代码在您的本地将运行为分离头模式。
停止所有PR代码查看和回到你的前一个分支
如果你想移动PR(加上你在获取PR后所做的任何新的本地更改)到一个新的本地分支,使用下面的命令
git switch -c myNewLocalBranch
虽然这个线程上的大多数答案都可以工作,但我更喜欢选择拉请求更改,这允许我测试以及查看我的IDE中的差异。
git checkout <newbranch> git fetch origin pull/<pullrequestId>/head && git cherry-pick FETCH_HEAD
如
git checkout test-pr git fetch origin pull/34/head && git cherry-pick FETCH_HEAD
运行上述命令将提取PR的更改,并在您的IDE版本中显示它们,它们不会被提交,您可以看到差异,就好像这些更改是在本地进行的一样。