原产地与非起源分支的正确术语是什么



我试图理解 git 中关于本地存储库中源和非源空间之间划分的相关术语。

请考虑以下方案。我已经签出了分支foo,我想将其重定基数到master上,但首先我想确保master远程存储库是最新的。 我可以这样做:

git checkout master
git pull
git checkout foo
git rebase -i master

这工作正常。但是,如果我进行获取然后重新定位到origin/master,我可以避免master结帐。

git fetch -a
git rebase -i origin/master

在试图向同事解释这两种方法之间的区别时,我意识到我不知道origin/mastermaster之间的术语差异。谁能在这里教我正确的词汇?

master

是一个分支。 有时您可以称其为"本地分支"。 如果你想非常具体,你可以说它是refs/heads下的参考。

origin/master是一个远程跟踪参考。 有些人称之为远程跟踪分支。 (我认为即使是文档也可能至少在某些地方使用该术语。 这很不幸,因为它不是一个好origin/master名字,至少有两个原因:

  1. 如果我有master并且它跟踪origin/master这也意味着我列为origin远程的存储库有一个名为master的分支。origin上的master分支与我的本地存储库中的origin/masterref 不同,如果有什么是"远程分支",那就是远程存储库¹上的分支。 将"跟踪"一词放在中间并不会使其不那么混乱;承认远程跟踪引用是与分支不同类型的引用确实如此。

  2. 这表明origin/master是一种分支。 当然origin/master是一种引用类型,它通常(并非总是)与本地分支相关,并且与远程分支相关。 但它的行为不像树枝。 如果你检查出来,你处于分离的头部状态;因此,承诺不会推进它。 它对如何移动有自己的约定(由与遥控器的通信控制)。

毫无疑问,它是refs/remotes/origin下的参考。


¹当您建议将变基到origin/master是替代pull然后变基到master时,这种区别的重要性就表现出来了。 这不是因为你的origin/master可能无法反映master现在origin的位置;它仅反映您上次更新远程参考以进行originoriginmaster的位置。 它大致相当于fetch和变基到origin/master,不同之处在于这让master落后于origin/master

origin/master是指向远程分支的指针,它指向远程origin中的master分支。master是本地分支机构。 它们是两个不同的东西(但可以通过设置本地分支的upstream分支来连接)。 并非所有本地分支都有上游分支。

不能直接更改origin/master指向本地的内容。 您只能通过push来做到这一点。

您可以添加另一个遥控器,例如fred(带git remote add)。fred也可能有一个master分支,并且会在您的存储库中显示为fred/master。 您的本地master不会fred/master作为upstream分支(默认情况下,但您可以更改它)。

Git 文档有时不太擅长明确区分,但一般来说,像master这样的名称称为分支名称,而像origin/master这样的名称称为远程跟踪分支名称

我不喜欢后一个短语,因为很容易将它们混淆,特别是如果您删除一个单词或重新排序一两个单词。 我的首选新术语是远程跟踪名称,因为如果您删除带连字符的术语,很明显您不清楚:-),如果您删除名词而不是形容词,带连字符的术语远程跟踪仍然相当清晰。

这仍然为与 remote混淆留下了很大的空间,远程是像origin本身这样的名称的术语:git remote操纵这些远程,这些远程大多只是记住长 URL 的方法。 也很容易将其与动词跟踪或跟踪混淆,后者在 Git 中大约有 4000 万种不同的含义。:-) 好吧,不是那么多,而是太多了:

  • 一个将其他名称设置为上游的分支据说可以跟踪上游。
  • 当且仅当文件的路径名位于索引中时,才会跟踪该文件,否则将取消跟踪该文件。
  • 远程跟踪名称是类似于origin/master.

Git的名字,如masterorigin/master,是命名空间中的名字。 命名空间名称都以refs/开头;分支名称是以refs/heads/开头的 ref(或引用),标签名称以refs/tags/开头,远程跟踪名称以refs/remotes/开头(并继续包括远程名称加上另一个斜杠)。 (人们可以争论特殊名称HEADMERGE_HEADORIG_HEAD等是否也是引用/引用。 Git 本身大多说它们不是,除非它说它们是......

最新更新