为什么 git branch -r 显示同一分支的两个名称:origin/master 和 [repo 名称]/master?

Why git branch -r shows two names for same branch: origin/master AND [repo name]/master?

注意到我已经执行了:

git fetch

git fetch --prune

同样的结果。

我的 git branch -r 输出:

一开始我很困惑,以为我创建了重复的分支,但在 repo 页面中,只有一个 master。 (连'dev-daal'都删了)

编辑 1:

我试过

git fetch --all

现在我所有的东西都有两个版本:

您有两个遥控器。说 git remote -v 查看列表。如果它们是同一个 URL 的两个名称,您可以删除一个。

git remote rm Daal-Backend

git branch -r 命令列出了您的 remote-tracking 姓名。 Git 在其一些文档中称它们为“remote-tracking 分支名称”,但尽管 Git 过度使用“分支”一词,remote-tracking 名称并不是 branch 名字在一个非常重要的意义上。这就是为什么我喜欢省去误导性的词,只称它们为“remote-tracking 名字”。

无论如何,关于 remote-tracking 名称,有几件事需要了解:

  1. 它们在您的 存储库中。它们不一定对任何其他存储库有任何意义,除了下一点。

  2. 您的 Git 软件 创建或更新 它们,在您的存储库中,当您的 Git 软件连接到其他 Git 软件与其他 Git 存储库一起工作,并且其他 Git 软件告诉您的 Git 软件 other 存储库当前有一些分支名称。由于分支名称是临时的且无意义的,但对于定位 commits(它们是永久的且有意义的)很有用,您的 Git 软件 copies 那些名称到您的存储库,以便您可以使用他们的名称。但由于这些是 他们的 分支名称,而不是你的,所以你的 Git 重命名 他们的分支名称。

  3. 你得到的名字——remote-tracking名字——是用你用来他们的Git交谈的名字制成的软件,例如 originDaal-Backend,添加一个斜杠 /,然后使用它们的 分支 名称。因此,如果您的 Git 软件正在使用名称 Daal-Backend 与其他 Git 软件通信,而其他 Git 软件告诉您,就在这一刻,他们 有一个名为 master 的分支,你的 Git 将在 [=49] 中创建或更新名称 Daal-Backend/master =]您的 存储库,以便您可以轻松检索 他们 当前正在调用 master.

    的提交的哈希 ID

如果他们——无论他们是谁——重命名他们的 master,你的 Git 将在下次你的 Git 呼叫他们的 Git 时使用新名称,并且与他们谈论他们的分支名称。届时,您的 Git 软件将根据他们的新名称创建一个新名称,例如 Daal-Backend/main。你的Git不会删除你的旧名字,除非你告诉它。

同样,如果他们 完全删除 他们的 master (如果他们愿意,他们可以这样做:名字 master 没有什么特别的)和你的Git 呼叫他们的 Git,你的 Git 不会做任何事情,因为你的 Git 不再看到他们的 master。你必须告诉你的 Git 如果你和他们交谈而他们根本没有那个分支名称,请删除我的副本 。您可以使用 git fetch --prune Daal-Backend 执行此操作。这让你的 Git 询问他们的 Git 关于他们所有的分支名称,根据需要创建或更新你的 remote-tracking 名称,并且 删除 任何 陈旧,left-over 个名字。

请注意,这一切都假设您让 Git 软件使用名称 Daal-Backend 来调用他们的 Git 软件。您现在是否应该使用名称 origin(如 git fetch origin)调用任何其他 Git 软件,无论是否属于他们,并获取有关 another[= 的信息80=] 存储库,这次您的 Git 软件将创建 and/or 更新您的 origin/* 名称。

因此,这完全取决于您用来联系 Git 所谓的 远程 的名称。 远程 只是其他一些Git 存储库的简称:远程挂在URL 上。您将使用 git remote add 添加 一个遥控器,或者 git remote remove 删除 一个遥控器。那个遥控器的存在,加上你 运行 git fetch,加上那个遥控器 上的分支名称的存在,是导致你拥有 remote-tracking 名字。