git中"跟踪"的概念有不同的含义吗?

Phi*_*lip 13 git branch tracking git-checkout

我运行'git branch -r'然后得到

产地/ BRANCH1

产地/ BRANCH2

在手册页中,-r选项将"列出或删除(如果与-d一起使用)远程跟踪分支".因此origin/branch1和origin/branch2被称为远程跟踪分支.但是,您无法直接提交到远程跟踪分支(将创建匿名分支).远程跟踪分支在运行'git fetch'时只跟踪远程分支.

这里的语义对我来说有点模糊.如果我那么

git checkout -b branch1 origin/branch1

我得到以下输出:"Branch branch1设置为从原点跟踪远程分支branch1.切换到新分支'branch1'"

这是我的问题,尽可能详细地说明是什么让我感到困惑......由于branch1设置为从原点跟踪远程分支branch1,'branch1'因此被视为远程跟踪分支?如果是这样,那么这与'origin/branch1'在运行'git branch -r'时已被列为远程跟踪分支这一事实相冲突吗?据我所知,存在本地(主题)分支或远程跟踪分支.当运行'git checkout -b branch1 origin/branch1'时,我是通过提取方式创建一个跟踪远程分支的本地(主题)分支(我可以在其上添加提交)吗?运行'git branch'现在给出:'*branch1',并且运行'git branch -r'仍然给出'origin/branch1'和'origin/branch2'.我创建了branch1来添加提交和跟踪origin/branch1.哪个被认为是远程跟踪分支,'branch1'来自'git branch'的输出,'origin/branch1'来自'git branch -r'的输出?

Mar*_*air 14

这是一个关于git术语特别恼人的一个很好的问题,虽然该项目似乎正在慢慢修复.

基本上,"轨迹"是指一些在表达式非常不同的(a)"远程跟踪分支"和(b)" branch1设置为追踪远程分支branch1origin".这是一个快速摘要:

  1. "远程跟踪分支":远程跟踪分支是通常由git fetch,更git pull确切地更新的分支.¹您可以将它们视为远程存储库中分支状态的缓存.您可以从中进行合并,检查其历史记录等,但您无法直接使用它们.此短语中的"跟踪"表示远程跟踪分支表示上次远程跟踪分支更新时远程存储库中分支的状态.
  2. Branch foo设置为从跟踪远程分支:在这个短语中,您被告知的是git已经设置了将本地分支foo与远程跟踪分支相关联的配置变量origin/bar.这样可以实现一些很好的功能,例如,git pull当您在分支上时,只需键入foo即可获取然后进行合并origin/bar.这也是您如何获得有关分支状态相对于远程跟踪分支的消息的帮助,例如"您的分支foo是提前24个提交origin/bar可以快进".你被告知你当地的分支机构跟踪 已与远程跟踪分支相关联.您也听到这个被称为origin/bar上游相对foo.

因此,这些跟踪/跟踪的感觉是完全不同的,遗憾的是它是混淆的常见原因.

第二个意义似乎正在缓慢但反对, -例如,为可能的选项之一push.default曾经是tracking,但是这是赞成的选项名称的弃用upstream.


所以,直接回答你的问题:

由于branch1设置为从原点跟踪远程分支branch1,因此'branch1'被认为是远程跟踪分支吗?

不,branch1不是远程跟踪分支.

当运行'git checkout -b branch1 origin/branch1'时,我是通过提取方式创建一个跟踪远程分支的本地(主题)分支(我可以在其上添加提交)吗?

好吧,有点 - 它跟踪(感知2)远程跟踪分支,后者通过提取从远程存储库中的分支更新.(就个人而言,我试图避免使用"远程分支"一词,而选择"远程存储库中的分支",以防万一人们认为你的意思是远程跟踪分支.)

运行'git branch'现在给出:'*branch1',并且运行'git branch -r'仍然给出'origin/branch1'和'origin/branch2'.我创建了branch1来添加提交和跟踪origin/branch1.哪个被认为是远程跟踪分支,'branch1'来自'git branch'的输出,'origin/branch1'来自'git branch -r'的输出?

远程跟踪分支是origin/branch1.


¹当您成功git push访问远程存储库中的相应分支时,它们也会更新.