关于分支:git中“跟踪”的概念有不同的含义吗?

Are there different meanings to the concept of 'tracking' in git?

我运行"git branch-r"并获取

origin/branch1

origin/branch2

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

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

git checkout -b branch1 origin/branch1

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

这是我的问题,尽可能的用语言来解释什么让我困惑…通过将branch1设置为从原点跟踪远程分支branch1,"branch1"是否因此被视为远程跟踪分支?如果是这样,这是否与运行"git branch-r"时"origin/branch1"已被列为远程跟踪分支的事实冲突?据我所知,存在本地(主题)分支或远程跟踪分支。当运行"git checkout-b branch1 origin/branch1"时,我是否创建了一个本地(主题)分支(我可以将提交添加到该分支上),该分支通过提取来跟踪远程分支?现在运行"git branch"会得到:"*branch1",运行"git branch-r"会得到"origin/branch1"和"origin/branch2"。我创建了Branch1来添加提交并跟踪源/分支1。哪个被认为是"git branch"输出的远程跟踪分支"branch1",或"git branch-r"输出的"origin/branch1"?


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

基本上,"track"在(a)"远程跟踪分支"和(b)"branch1"中的含义是非常不同的,它们设置用于跟踪来自origin的远程分支branch1。下面是一个简短的总结:

  • "远程跟踪分支":远程跟踪分支通常由git fetch更新,因此,git pull更新。1您可以将这些分支视为远程存储库中分支状态的缓存。您可以从它们中合并、检查它们的历史记录等,但不能直接对它们进行操作。"此短语中的track"表示远程跟踪分支代表上次更新远程跟踪分支时远程存储库中分支的状态。
  • 分支foo设置用于从源站跟踪远程分支条:在这个短语中,您被告知Git设置了配置变量,将您的本地分支foo与远程跟踪分支origin/bar关联起来。这使得很好的功能,比如在分支foo上时只需键入git pull,就可以从origin/bar获取并合并。这也是您获得有关分支相对于远程跟踪分支状态的有用信息的方式,例如"您的分支foo是24,在origin/bar之前提交可以快速转发"。您被告知,您的本地分支正在跟踪已与远程跟踪分支关联。你还听说这被称为origin/bar,与foo有关。
  • 所以,这些跟踪/跟踪的感觉是完全不同的,不幸的是,这是一个常见的困惑来源。

    然而,第二种感觉似乎正被慢慢地弃用,例如,push.default的一种可能的选择曾经是tracking,但现在这一点被弃用,取而代之的是选项名称upstream

    因此,要直接回答您的问题:

    By virtue of having branch1 set up to track remote branch branch1 from origin, is 'branch1' thus considered a remote-tracking branch?

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

    When running 'git checkout -b branch1 origin/branch1', am I creating a local (topic) branch (onto which I can add commits) that is tracking a remote branch by way of fetches?

    嗯,有点-它是跟踪(sense 2)一个远程跟踪分支,后者通过获取从远程存储库中的一个分支进行更新。(就我个人而言,我尽量避免使用"远程分支"这个词,而不是"远程存储库中的分支",以防人们认为你是远程跟踪分支。)

    Running 'git branch' now gives: '* branch1', and running 'git branch -r' still gives 'origin/branch1' and 'origin/branch2'. I created branch1 to add commits to and to track origin/branch1. Which is considered the remote-tracking branch, 'branch1' from the output of 'git branch', or 'origin/branch1' from the output of 'git branch -r'?

    远程跟踪分支机构是origin/branch1

    1当您成功地将git push创建到远程存储库中的相应分支时,它们也会被更新。