我删除了远程分支,如何同步到本地?

问题描述 投票:0回答:1

我在 Github 上创建了一个存储库。我有两个开发环境,并且我在两个开发环境上都使用 Github for Windows 访问 Github。

在两个开发环境之一上,我删除了一个分支并在 Github for Windows 中单击“同步”。该分支在 Github 中已被适当删除。当我从其他开发环境同步时,有一个选项可以“发布”要删除的分支,但没有选项可以删除它。

如何告诉 git 或 Github for Windows 进行完全同步,包括删除过时的分支?

git github-for-windows
1个回答
30
投票

是和否 - 取决于“删除本地分支”的真正含义。

快速回答

  • 不,不可能让远程存储库删除正常的 本地存储库中的分支。

  • 是的,可以要求 Git 删除本地中所谓的远程分支 在特定时间删除的分支的存储库 命名远程(例如“origin”)。

    这个是通过跑步实现的

      git remote prune origin
    

      git fetch --prune
    

说明

请首先理解 Git 处理远程存储库的模型是不对称的:本地存储库中的分支的名称与远程存储库中的分支的名称完全匹配这一事实没有任何意义 到 Git。

原因有两个:

  • Git 将您的本地存储库视为完全独立的 并且不依赖于任何其他存储库。
  • 您的本地存储库能够与任意数量的 远程存储库,以及……
  • …这些存储库可能完全没有“概念”关系 到您的本地存储库:例如,可以从托管 Linux 源代码的存储库中将数据提取到包含以下内容的存储库中: 你的周末玩具项目。 (换句话说,Git 存储库不包含任何类型的 UUID,可用于检查两个通信存储库是否管理“逻辑上相同”的数据。)

换句话说,如果您在 Github 上托管了一个私有存储库,并且在您的 PC 上有一个它的本地克隆,那么您通过 Github 的 UI 删除了一个分支,现在希望该分支在您的本地克隆中消失,那就是确实可以理解,因为这两个存储库具有一对一的关系。现在考虑一下,您有一个由您的开发人员同事 Gill、Joe 和 Alice 克隆的存储库,他们每个人都简单地创建了一个名为“feature”的分支来开发不同功能,然后您从所有这三个存储库中获取 - 结束三个远程分支名为

<remote>/feature
,其中
<remote>
占位符在每种情况下都是您为这三个远程存储库提供的远程名称。除此之外,您可以拥有自己的名为“feature”的分支,它与其他开发人员的同名分支无关。现在考虑一下,比如说,爱丽丝合并了她的“功能”分支,然后摆脱了它——这是否意味着下次您从爱丽丝的存储库中获取时,您自己的分支“功能”也必须自动消失?当然不是。

因此,虽然 Git 有某些帮助程序可以将本地分支与特定的远程分支联系起来,但这些联系是不对称的。 特别是,Git 将你的本地历史视为“神圣的”, 对它的破坏性操作需要你明确的行动。

为极客提供更多信息

上面解释的不对称性只发生在“普通”Git 存储库中——大多数时候都在使用。应该注意的是,可以创建一个以不同方式运行的 Git 存储库:例如,在此类存储库中调用

git fetch origin
将确保
<origin>
的分支和标签的状态将镜像到本地存储库 - 必要时删除和创建内容。

© www.soinside.com 2019 - 2024. All rights reserved.