0

I noticed that, for some reason, some of my git branches are prefixed with "remotes/origin":

BZ9
 * master   
 remotes/origin/BZ8   
 remotes/origin/BZ9   
 remotes/origin/HEAD -> origin/master   
 remotes/origin/junit1   
 remotes/origin/master

What is the difference between, for example, the "remotes/origin/BZ9" branch and the BZ9 branch? Clearly, they both originate from the same conceptual branch, but git is considering them to be distinct.

4

1 回答 1

0

在您的列表中,“BZ9”和“master”都是您可以自由移动更新和删除的本地分支。当您在其中一个分支上执行提交时,分支会更新以指向您的最新提交。

但是,当您键入时显示的远程/来源前缀名称git branch -a就像分支一样,但您可以将它们视为“只读”。这些分支不是您直接控制的,它们会在您获取时自动设置,并且在您再次获取(或拉取)之前它们不会改变。

这是因为与跟踪本地开发的本地分支不同,remote/origin 分支跟踪您从中提取的服务器上的远程开发(“origin”)。

例如,“remotes/origin/junit1”是说:“最后一次 git 从远程源 repo 获取,那里有一个名为 junit1 的分支,它指向这个提交哈希”。

您可以像其他任何分支一样签出该远程分支,但是当您提交到该分支时,分支指针不会更新,因为它不是要跟踪您的本地进度,而是要跟踪远程仓库的进度。

您的本地进度由您的本地分支机构跟踪,您可以根据需要自由创建、更新、删除。

同样,如果其他人从您的存储库中克隆,那么当他们从您那里获取时,他们会从您那里获得两个远程分支:“remotes/origin/BZ9”和“remotes/origin/master”。换句话说,您的本地分支成为您下游某人的远程/原始分支。

这就是你所有的远程/源分支,它们是你上游仓库本地分支的只读副本。

于 2013-02-19T02:40:03.840 回答