如何在git中跟踪分支的引用?

时间:2016-02-28 23:57:48

标签: git github

我希望在更新请求时使用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

2 个答案:

答案 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