如果已删除的分支仍显示在 Mac 上的 Git 中,请从本地仓库中清理这些远程跟踪引用。打开终端,切换到仓库文件夹,确认要刷新的远程仓库,然后运行 git fetch --prune origin。这将更新获取的引用并删除与 origin 关联的陈旧引用;它不会从远程服务器删除分支,也不会删除您的本地分支。Git 的 git fetch 文档

清理时会刷新哪些内容?

远程跟踪分支是您本地对远程仓库中分支的记录。例如,origin/feature-x 代表上次获取的远程分支状态。它与名为 feature-x 的本地分支是分开的。如果远程分支已被删除,您的本地引用可能会一直保留,直到 Git 对其进行清理。Git 的默认抓取映射通常将远程分支存储在 refs/remotes/origin/ 下,不过仓库也可以使用不同的映射。Git 文档说明了配置的抓取 refspec 如何映射远程分支。

清理操作会将远程仓库的当前引用与该远程仓库抓取配置所涵盖的本地引用进行对比,然后移除远程仓库中已不存在的引用。它清理的是您的本地视图;并不是用于删除远程分支的命令。当仓库累积了陈旧的分支引用时,这样做可以使 git branch --all 等命令的输出更易于阅读。Git 的清理指南

从终端刷新引用

Apple 文档指出 zsh 是 Mac 上“终端”的默认 shell,不过 Mac 或托管环境可能会有不同的配置。以下 Git 命令在常见的 macOS 终端设置中均可正常使用。Apple 终端使用手册

  1. 打开终端并进入仓库文件夹。如果您知道其路径,且路径中包含空格,请用引号括起来,例如:
cd "/Users/sam/Projects/Client App"

将示例路径替换为您仓库的实际路径。如果您不确定当前所在位置,可以使用 pwd 输出当前目录。请在仓库内部运行这些 Git 命令。

  1. 确认仓库和远程仓库名称:
git status --short --branch
git remote -v

git remote -v 会列出已配置的远程仓库名称和 URL。origin 很常见,但请使用对应您想要刷新引用的服务器所显示的名称。如果仓库配置了多个远程仓库,请仅清理目标仓库。

  1. 在删除陈旧引用之前进行预览:
git remote prune --dry-run origin

Git 会报告它将清理哪些引用,而不会实际删除它们。dry-run 选项属于 git remote prune;它不会抓取新的分支顶端。Git 的 git remote 文档

  1. 如果预览结果符合您的预期,可一步完成刷新和清理:
git fetch --prune origin

这将根据远程仓库配置的 refspec 进行抓取,并删除该映射所涵盖的陈旧引用。Git 的 fetch 输出会用 - 标记已清理的引用。如果只想清理而不抓取更新,请改用 git remote prune origin。Git 记录了这两种单次操作方法。

  1. 检查结果:
git branch --remotes
git branch --all

仅查看远程分支的列表会显示远程跟踪分支;全部分支列表则同时包含远程跟踪分支和本地分支。从远程列表中消失的分支可能仍然作为本地分支存在,清理操作并不会将其删除。

如果陈旧引用仍然存在

首先检查您是否使用了正确的远程仓库名称。然后检查仓库的抓取配置:远程仓库可以设置为仅跟踪选定的分支,而自定义 refspec 会改变 fetch 和 prune 操作所针对的引用。使用 git config --get-all remote.origin.fetch 检查映射情况,如有需要请替换 origin。如果远程仓库被配置为仅跟踪一个子集,那么在该子集之外的分支在默认抓取下的表现可能不符合预期。Git 解释了抓取 refspec 及其对清理的影响。

如果命令报告网络或身份验证错误,则说明 Git 无法完成远程抓取;请解决连接或访问权限问题后重试。避免添加 --prune-tags,除非您确实希望将清理也应用于标签:Git 警告称,显式的标签 refspec 可能会导致本地存在但该远程仓库缺失的标签被删除。Git 的清理文档说明了此标签注意事项。

当您想要同时获取最新的远程跟踪信息并进行清理时,请使用 git fetch --prune origin。当您想先审查候选对象时,请先使用 git remote prune --dry-run origin;或者当您只想清理而不抓取分支更新时,使用 git remote prune origin。

来源