如何列出出现(按照.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应该是跟踪origin/c,这仍然存在.
Sch*_*eis 13
如果您的本地分支机构正在跟踪远程分支,您可以过滤分支列表,以便显示没有跟踪分支的分支:
git branch -vv | grep -v origin
Run Code Online (Sandbox Code Playgroud)
这将提供有关分支上最后一次提交的一些额外信息,但您可以对其进行过滤
git branch -vv | grep -v origin | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
这将仅打印未跟踪远程分支的分支的名称.
git for-each-ref refs/heads --format='%(refname:short) %(upstream)' \
| awk 'NF==1'
Run Code Online (Sandbox Code Playgroud)
会做的.NF是awk的"字段数",其默认操作是print.
LANG=en git branch --format='%(if:equals=gone)%(upstream:track,nobracket)%(then)%(refname:short)%(end)' | grep '.'
Run Code Online (Sandbox Code Playgroud)
要列出您可以使用的跟踪已删除远程分支的本地分支 git remote prune --dry-run
例如(假设您的远程存储库名为origin):
git fetch
git remote prune origin --dry-run
Run Code Online (Sandbox Code Playgroud)
您可以删除--dry-run从本地存储库中删除分支的选项