git refs/pull/... vs. 拉/

git refs/pull/... vs. pull/

在各个地方寻找有关如何从 GitHub 合并请求创建本地分支的说明,我看到了两个版本:

git fetch upstream refs/pull/PR_ID/head:NEW_LOCAL_BRANCH

git fetch upstream pull/PR_ID/head:NEW_LOCAL_BRANCH

我的问题是,地址中包含“refs”和有什么区别?
两者似乎都工作正常。

what's the difference between including "refs" in the address, and not including it?

包含它可以提供直接有效的参考。

不包括它意味着Git必须弄清楚你的意思。它通过尝试东西来做到这一点。它尝试的第一件事就是将 refs/ 放在你所说的内容前面——天哪,这行得通。


(要了解 Git 用来弄清楚你的意思的完整过程,请参阅

https://git-scm.com/docs/gitrevisions

查看指定修订下的第三个条目。)

前缀 refs/pull/ 是 GitHub 发明的 ref(或引用)命名空间,如果这个词不太强的话,用于他们的 Pull Request 功能。它不是标准的 Git 命名空间,并且 Git 默认情况下会在获取时忽略 refs/pull/ 命名空间中的名称。

, if you use an abbreviated ref (anywhere, not just in a refspec), Git will attempt to match it up with a full ref if possible. The precise rules for doing this matching depend on where you use such a name. The usual set is outlined in the gitrevisions documentation,但它谈论的是仅存在于您自己的存储库中的本地引用;当你做 git fetchgit push 时,一些引用不是本地的,这些规则会稍微弯曲。