Git:如何列出跟踪不再存在的远程分支的本地分支?

Ste*_*ane 13 git

如何列出出现(按照.git/config)跟踪不再存在的远程分支的任何本地分支?在这种情况下,远程分支机构在GitHub上,但我怀疑它们的位置没有相关性.

例如:

  1. 我有地方分支机构,a,b,cd.
  2. a正在跟踪origin/ac正在跟踪origin/c.
  3. b并且d不跟踪远程分支.
  4. origin/a已被合并回主服务器并在存储库清理期间被删除; 我不再需要保留本地分支a.
  5. 如果本地分支a签出到工作树,则运行git fetchgit pull导致错误Your configuration specifies to merge with the ref 'a' from the remote, but no such ref was fetched.

如何生成仅包含a其他本地分支的列表,这些分支似乎跟踪不再存在的远程分支?

我想识别这些,以便我可以删除我不再需要的过时的本地分支.

该列表不应包括本地分支bd不跟踪远程分支,也不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)

这将仅打印未跟踪远程分支的分支的名称.


jth*_*ill 6

git for-each-ref refs/heads --format='%(refname:short) %(upstream)' \
| awk 'NF==1'
Run Code Online (Sandbox Code Playgroud)

会做的.NF是awk的"字段数",其默认操作是print.


Ant*_*gun 6

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 origin`命令之后运行时,这似乎工作得很好,谢谢!我使用“xargs”将其输入“gitbranch-D”以删除这些分支。 (2认同)

STW*_*STW 5

要列出您可以使用的跟踪已删除远程分支的本地分支 git remote prune --dry-run

例如(假设您的远程存储库名为origin):

git fetch
git remote prune origin --dry-run
Run Code Online (Sandbox Code Playgroud)

您可以删除--dry-run从本地存储库中删除分支的选项