如何使用 git 列出远程 A 中但不在远程 B 中的分支?

How to list branches which are in remote A but not in remote B with git?

例如,如果我有一个 "main" 我开发的上游存储库,以及一个我在完成工作日后备份我的工作的副存储库 - 现在我想删除副存储库上的分支"main" 存储库中不再存在的内容,因为它们已合并(或其他)。

如何列出存在于 "side" 远程但不存在于 "main" 远程的分支?

更新 - 合并了来自 torek 的反馈 更新 2 - 对建议脚本的微小但可能很重要的更改


好吧,git 不考虑多个存储库中存在的分支。您在本地存储库中有分支,并且在任何给定的远程中都有分支的快照...并且本地分支可能与远程分支具有相同的名称,但它仍然不是 "the same branch" git。

只有跟踪提供了一种错觉,即 "the same branch" 在两个回购中。 (并且只是作为一种约定,通常将本地分支命名为与远程分支相同的名称。)这也受到限制,因为您不能让一个本地分支跟踪两个远程分支...

说来话长,我认为仅 git 无法完成您的要求;您可能需要 post-以某种方式处理一些 git 输出。

您可以通过说

来获取远程分支的列表
git for-each-ref refs/remotes/<remote-name>

您可以使用 cut 来获取基本的分支名称 (cut -d\/ -f 4-)。 (请注意尾随 -,如果分支名称包含 /,这很重要 if/only。)然后排序。然后输入 comm 以查看哪些行出现在两者中,或者只出现在一个中。