Answers:
最简单的方法是这样的:
git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD
现在,您将位于处于拉取请求状态的新分支上。
您可能需要通过运行来设置别名
git config --global alias.pro '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'
现在,您可以通过运行git pr <pr_number>
,或者git pr <pr_number> <remote>
如果您的github遥控器未命名,来签出任何PR origin
。
.gitconfig
文件中的下[alias]
:pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f"
。这样,我只需键入git pr upstream 62
,然后我便知道下一件事,我从上游进入PR#62的新分支!如果您始终使用origin
,则可以使用而不是对其进行硬编码$1
,但这对我来说是正确的。
co
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH
例如:
$ git fetch origin pull/611/head:pull_611
$ git checkout pull_611
进行更改,提交,推送并从GitHub上的fork打开新PR
您可以按照本要点中的指示进行操作,以便能够直接检出远程数据库,而不必弄清楚其存储库和分支。
用法示例
对于我的一个项目(github3.py),我的内容如下 github3.py/.git/config
[remote "github"]
fetch = +refs/heads/*:refs/remotes/github/*
fetch = +refs/pull/*/head:refs/remotes/github/pr/*
url = git@github.com:sigmavirus24/github3.py
第一行是每个遥控器的标准配置,但github
用遥控器的名称代替。这意味着远程头(或该服务器上分支的头)被“映射”到以前缀的本地远程github/
。所以,如果我做了git fetch github
,不得不说是不是已经在我的机器上本地注意到在GitHub上的一个分支,它会下载分支,我可以切换到它,像这样:git checkout -t github/branch_name
。
第二行做同样的事情,但是它对拉取请求而不是标准的git分支。这就是为什么你看到refs/pull/*/head
。它在GitHub上提取每个拉取请求的头部并将其映射到github/pr/#
。因此,如果有人发送拉取请求并且编号为62(例如),您将执行以下操作:
git fetch github
git checkout -t github/pr/62
然后,您将在一个名为的本地分支上pr/62
(假设它尚不存在)。很好,这意味着您不必跟踪其他人的遥控器或分支机构。
git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clone
要点文件中。
git fetch github
可以做git co -t github/pr/#
。这样可以避免您不得不复制和粘贴远程URL,弄清分支名称等。然后,您将获得命名准确,简明而准确的分支名称,而无需额外麻烦。但我知道它似乎势不可挡。
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head
git pull
创建合并到当前分支;通常对于PR,您只想git fetch
获取原始作者的代码(然后可以通过FETCH_HEAD访问)。如果您确实想要合并,还值得一提pull/2/merge
(而不是pull/2/head
),这使GitHub为您提供了如果您现在单击[Merge]按钮会发生的确切合并提交。
(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)
您可以简单地使用 git pr
$ git pr 62 [remote]
clone
而是fetch
看:stackoverflow.com/questions/6743514/...