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

2024-02-24

我运行 'git Branch -r' 并得到

起源/分支1

起源/分支2

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

这就是语义对我来说有点模糊的地方。如果我那么

git checkout -b 分支1 原点/分支1

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

这是我的问题,尽可能详细地澄清让我困惑的事情...... 由于将branch1设置为从原点跟踪远程分支branch1,因此“branch1”是否被视为远程跟踪分支?如果是这样,这是否与运行“gitbranch-r”时“origin/branch1”已被列为远程跟踪分支的事实相冲突?据我了解,存在本地(主题)分支或远程跟踪分支。运行“git checkout -bbranch1 origin/branch1”时,我是否创建一个本地(主题)分支(我可以在其中添加提交),该分支通过获取方式跟踪远程分支?运行“gitbranch”现在给出:“*branch1”,运行“gitbranch-r”仍然给出“origin/branch1”和“origin/branch2”。我创建了branch1来添加提交并跟踪origin/branch1。哪个被认为是远程跟踪分支,“gitbranch”输出中的“branch1”,还是“gitbranch-r”输出中的“origin/branch1”?


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

基本上,“跟踪”在表达式(a)“远程跟踪分支”和(b)“中意味着非常不同的东西branch1设置跟踪远程分支branch1 from origin”。这是一个快速总结:

  1. “远程跟踪分支”:远程跟踪分支是通常由以下人员更新的分支git fetch, 因此,git pull.1 您可以将它们视为远程存储库中分支状态的缓存。您可以合并它们,检查它们的历史记录等,但不能直接对它们进行操作。该短语中的“跟踪”意味着远程跟踪分支表示上次更新远程跟踪分支时远程存储库中的分支的状态。
  2. Branch foo set up to track remote branch bar from origin: in this phrase what you're being told is that git has set up configuration variables that associate your local branch foo with the remote-tracking branch origin/bar. This enables nice features like being able to just type git pull while you're on branch foo in order to fetch and then merge from origin/bar. It's also how you get helpful the messages about the state of your branch relative to the remote-tracking branch, like "Your branch foo is 24 commits ahead of origin/bar can can be fast-forwarded". You're being told that your local branch is tracking has been associated with a remote-tracking branch. You also hear this referred to as origin/bar being upstream with respect to foo.

因此,这些追踪/追踪的感觉是完全不同的,遗憾的是,这是一个常见的混乱来源。

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


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

由于将branch1设置为从原点跟踪远程分支branch1,因此“branch1”是否被视为远程跟踪分支?

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

运行“git checkout -bbranch1 origin/branch1”时,我是否创建一个本地(主题)分支(我可以在其中添加提交),该分支通过获取方式跟踪远程分支?

嗯,有点像 - 它正在跟踪(意义 2)一个远程跟踪分支,而后者是通过获取从远程存储库中的分支进行更新的。 (就我个人而言,我尽量避免使用术语“远程分支”,而倾向于使用“远程存储库中的分支”,以防人们认为您指的是远程跟踪分支。)

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

远程跟踪分支是origin/branch1.


¹ 当您成功完成任务时,它们也会更新git push到远程存储库中的相应分支。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐