如何列出出现的任何本地分支(按.git/config
)来跟踪不再存在的远程分支?在这种情况下,远程分支机构在GitHub上,但我怀疑它们的位置没有相关性。
例如:
a
,b
,c
和d
。a
正在跟踪origin/a
,而c
正在跟踪origin/c
。b
和d
未跟踪远程分支。origin/a
已合并回主服务器,并在存储库清理期间被删除;我不再需要保留本地分支a
。a
已签出到工作树,则运行git fetch
或git pull
会导致错误Your configuration specifies to merge with the ref 'a' from the remote, but no such ref was fetched.
我如何生成仅包含a
的列表以及似乎跟踪不再存在的远程分支的任何其他本地分支?
我想识别这些,以便我可以删除不再需要的过时的本地分支。
该列表不应包含未跟踪远程分支的本地分支b
或d
,也不应包括仍在其中的跟踪c
的{{1}}。< / p>
答案 0 :(得分:10)
如果您的本地分支机构正在跟踪远程分支,您可以过滤分支列表,以便显示那些没有跟踪分支的分支:
git branch -vv | grep -v origin
这将提供有关分支上最后一次提交的一些额外信息,但您可以将其过滤掉
git branch -vv | grep -v origin | awk '{print $1}'
这将仅打印不跟踪远程分支的分支的名称。
答案 1 :(得分:6)
git for-each-ref refs/heads --format='%(refname:short) %(upstream)' \
| awk 'NF==1'
会做到的。 NF
是awk&#34;&#34;字段数&#34;,其默认操作是打印。
答案 2 :(得分:2)
要列出跟踪已删除远程分支的本地分支,您可以使用git remote prune --dry-run
例如(假设您的远程存储库名为origin
):
git fetch
git remote prune origin --dry-run
您可以删除--dry-run
选项以从本地存储库中删除分支
答案 3 :(得分:0)
LANG=en git branch --format='%(if:equals=gone)%(upstream:track,nobracket)%(then)%(refname:short)%(end)' | grep '.'