我运行'git branch -r'并得到
origin/branch1
origin/branch2
在手册页中,-r 选项将“列出或删除(如果与 -d 一起使用)远程跟踪分支”。所以 origin/branch1 和 origin/branch2 被称为远程跟踪分支。但是,您不能直接提交到远程跟踪分支(将创建一个匿名分支)。远程跟踪分支仅在运行“git fetch”时跟踪远程分支。
这里的语义对我来说有点模糊。如果我那么
git checkout -b branch1 origin/branch1
我得到以下输出: “分支 branch1 设置为从原点跟踪远程分支 branch1。切换到新分支‘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 来添加提交并跟踪 origin/branch1。哪个被认为是远程跟踪分支,“git branch”输出的“branch1”,或“git branch -r”输出的“origin/branch1”?
最佳答案
这是一个很好的问题,关于一个特别烦人的 git 术语,尽管这个项目似乎正在慢慢修复。
基本上,“track”在表达式 (a) “remote-tracking branch” 和 (b) “branch1
set up to track remote branch branch1
来自来源
”。这是一个快速总结:
- “远程跟踪分支”:远程跟踪分支是通常由
git fetch
更新的分支,因此git pull
.¹ 您可以将这些视为远程存储库中分支状态的缓存。您可以从它们 merge ,检查它们的历史等,但您不能直接对它们进行操作。此短语中的“跟踪”表示远程跟踪分支代表上次更新远程跟踪分支时远程存储库中分支的状态。 - 分支 foo 设置为从 origin 跟踪远程分支 bar:在这句话中,你是什么被告知 git 已设置配置变量,将您的本地分支
foo
与远程跟踪分支origin/bar
相关联。这启用了很好的功能,例如当您在分支foo
上时只需键入git pull
即可从origin/bar
获取然后 merge >。这也是您如何获得有关您的分支相对于远程跟踪分支的状态的消息,例如“您的分支foo
比origin/bar
可以提前 24 次提交可以快进”。您被告知您的本地分支正在跟踪已与远程跟踪分支相关联。您还听到这被称为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?
好吧,有点 - 它正在跟踪(意义 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
。
¹ 当您成功 git push
到远程存储库中的相应分支时,它们也会更新。
关于git - git中 'tracking'的概念有不同的含义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631337/