You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除远程仓库A中不存在于远程仓库B的所有分支和标签?

移除远程仓库A(origin)中不存在于仓库B(upstream)的分支和标签

步骤1:同步远程仓库的最新信息

先拉取两个远程仓库的分支、标签数据,并清理本地过时的引用:

git fetch upstream --prune
git fetch origin --prune

步骤2:清理远程分支

先确认要删除的分支

执行以下命令,列出origin存在但upstream没有的远程分支:

git branch -r | awk '/origin\/(?!HEAD)/ {sub("origin/", "", $0); print $0}' | grep -vFf <(git branch -r | awk '/upstream\/(?!HEAD)/ {sub("upstream/", "", $0); print $0}')

仔细核对输出内容,确保这些分支确实是需要删除的目标。

批量删除远程分支

确认无误后,执行以下命令批量删除这些分支:

git push origin --delete $(git branch -r | awk '/origin\/(?!HEAD)/ {sub("origin/", "", $0); print $0}' | grep -vFf <(git branch -r | awk '/upstream\/(?!HEAD)/ {sub("upstream/", "", $0); print $0}'))

步骤3:清理远程标签

先确认要删除的标签

执行以下命令,列出origin存在但upstream没有的标签:

git tag | grep -vFf <(git ls-remote --tags upstream | awk '{print $2}' | sed 's/refs\/tags\///')

核对输出内容,确认这些标签是需要删除的目标。

批量删除标签

确认无误后,执行以下命令删除本地对应标签,并同步删除远程仓库的标签:

git tag -d $(git tag | grep -vFf <(git ls-remote --tags upstream | awk '{print $2}' | sed 's/refs\/tags\///')) && git push origin --delete $(git tag | grep -vFf <(git ls-remote --tags upstream | awk '{print $2}' | sed 's/refs\/tags\///'))

注意事项

  • 执行删除操作前务必仔细核对目标分支和标签,避免误删重要内容。
  • 如果分支或标签名称包含特殊字符(如空格、斜杠),上述命令可能无法适配,建议手动删除这类特殊命名的分支/标签。

内容的提问来源于stack exchange,提问作者Darko Miletic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:25:55