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

标签 git github

我想在请求更新时使用 git 在本地跟踪 Github pull 请求(例如:添加了更多提交)。 Github 有一种方法,您可以通过查看只读 refs/pull/来处理提交给您的存储库的 pull 请求。

换句话说,如果有人向我的存储库提交 pull 请求,我可以在本地检索该请求:

git fetch upstream pull/123/head:123
git checkout 123

当有人随后更新该 pull 请求时,问题就出现了。我不知道如何更新本地分支,因为 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

最佳答案

我遇到了同样的问题,想分享一下我是如何解决的。

使用 --set-upstream-to 的想法不起作用,因为远程引用似乎不是分支。这听起来很奇怪,但我认为这与远程存储 ref 的位置有关(分支在 refs/heads 中,但 pull 请求在 refs/pull 中)。

但是,您可以在 git 配置中为您的 Remote 添加一个 refspec 到您的 fetch 规则

fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

您甚至可以添加一个 git 别名,将单个 pr 编号添加到您的 gitconfig 中的 refspecs(也可能是一个别名,以便在您完成后将其删除)。您可以在 origin 之后使用任何您想要的,但这是一个常见的选择。

有了这个,当你执行 git fetch origin 时,git 也会更新 pr 的 ref。快完成了:

git checkout -b pr/${prnum} --track origin/pr/${prnum}

完成!现在你的本地分支 pr/123 跟踪 remotes/origin/pr/123。后者是一个仅在您的本地存储库中有效的名称,但每次执行 git fetch 时(包括执行 git pull 时),它都会与 pull 请求分支保持同步。

注意:不太旧的 git 版本也应该允许将上面的 checkout 命令替换为

git checkout pr/123

这将创建分支 pr/123,并为 ref remotes/origin/pr/123 正确设置跟踪。

关于git - 如何在 git 中使用分支跟踪引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35689905/

相关文章:

c# - 有没有办法使用 libgit2sharp 恢复单个文件?

git - 如何在 git 中重新提交

没有本地工作目录的 Github 远程仓库上的 Python 更新文件

git - 将文件重置为特定提交的命令是什么?

linux - 无法推送 git 存储库

ios - 如何使 Xcode 中的 Swift 文件编译成为可选?

混帐克隆 : no address associated with name

Git:在新分支中重新开始,从历史记录中删除提交

php - 将 Git 与 Wordpress 结合使用

git - 如何从一个 Remote 获取并 push 另一个 Remote