我希望在更新请求时使用git在本地跟踪Github pull请求(例如:添加更多提交)。 Github有一种方法可以通过查看只读refs / pull /来处理来自你的仓库的拉动请求。
换句话说,如果有人向我的仓库提交拉取请求,我可以在本地检索该请求:
git fetch upstream pull/123/head:123
git checkout 123
当有人随后更新拉取请求时,会出现问题。我无法弄清楚如何更新本地分支,因为git pull不能更新我的本地副本:
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=<remote>/<branch> 123
我试过了:
git branch --set-upstream-to=upstream/refs/pull/123/head 123
git branch --set-upstream-to=upstream/refs/pull/123 123
git merge --ff-only refs/pull/123/head
merge: refs/pull/123/head - not something we can merge
答案 0 :(得分:1)
我遇到了同样的问题,并以为我会分享解决方法。
使用--set-upstream-to
的想法行不通,因为远程引用似乎不是分支。这听起来很奇怪,但是我认为这必须与远程存储ref的位置有关(分支位于refs / heads中,而pull请求位于refs / pull中)。
但是,您可以在git config中为您的远程提取规则添加一个refspec
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
您甚至可以添加一个git别名,该别名将单个pr号添加到gitconfig中的refspecs中(还可以添加一个别名,在完成后将其删除)。您可以在origin
之后使用任何内容,但这是常见的选择。
这样,当您执行git fetch origin
时,git还将更新pr的引用。差不多完成了:
git checkout -b pr/${prnum} --track origin/pr/${prnum}
完成!现在,您的本地分支pr / 123跟踪remotes / origin / pr / 123。后者是一个仅在本地存储库中有效的名称,但是每次执行git fetch时(包括执行git pull时),它都会与pull request分支保持同步。
注意:不太旧的git版本也应允许将上面的checkout命令替换为
git checkout pr/123
这将创建分支pr/123
,并正确设置引用remotes/origin/pr/123
的跟踪。
答案 1 :(得分:0)
git fetch origin pull/123/head:123
如果这项工作,则表示您是从远程origin
提取的,而非远程upstream
。
要link the 123 local branch created by this fetch,您需要:
git branch --set-upstream-to=origin/pull/123 123
如果有人更新该PR,请检查所述PR是否不是rebase 如果是,则需要获取PR分支并重置本地分支。
git fetch
git reset --hard 123 origin/pull/123