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

时间:2011-07-08 22:48:30

标签: git branch tracking git-checkout

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

  

起源/ BRANCH1

     

起源/ BRANCH2

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

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

  

git checkout -b branch1 origin / branch1

我得到以下输出: “分支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。哪个被认为是远程跟踪分支,来自'git branch'输出的'branch1',或来自'git branch -r'输出的'origin / branch1'?

1 个答案:

答案 0 :(得分:14)

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

基本上,“跟踪”表示表达式(a)“远程跟踪分支”和(b)“branch1设置为跟踪来自branch1的远程分支origin的内容非常不同}”。这是一个快速摘要:

  1. “远程跟踪分支”:远程跟踪分支是通常由git fetch更新的分支,因此git pull.¹您可以想到这些就像远程存储库中分支状态的缓存一样。您可以从中进行合并,检查其历史记录等,但您无法直接使用它们。此短语中的“跟踪”表示远程跟踪分支表示上次远程跟踪分支更新时远程存储库中分支的状态。
  2. 分支 foo 设置为从来源跟踪远程分支 bar :在这句话中你是什么被告知是git设置了配置变量,将您的本地分支foo与远程跟踪分支origin/bar相关联。这样可以实现一些很好的功能,例如,当您在分支git pull上时,只需键入foo即可从origin/bar获取然后合并。此外,您还可以获得有关分支状态相对于远程跟踪分支的消息的帮助,例如“您的分支fooorigin/bar之前提交的24个提交可以快速转发”。您被告知您的本地分支正在跟踪 已与远程跟踪分支相关联。您还会听到origin/bar所谓的foo 上游
  3. 所以,这些跟踪/跟踪的感觉是完全不同的,遗憾的是它是混淆的常见原因。

    然而,第二种感觉似乎正在慢慢弃用 - 例如,push.default的一个可能选项曾经是tracking,但现在不赞成使用选项名{ {1}}。


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

      

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

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

      

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

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

      

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

    远程跟踪分支是branch1


    ¹当您成功origin/branch1到远程存储库中的相应分支时,它们也会更新。