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

时间:2014-06-10 15:12:16

标签: git

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

例如:

  1. 我有本地分支,abcd
  2. a正在跟踪origin/a,而c正在跟踪origin/c
  3. bd未跟踪远程分支。
  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.
  6. 我如何生成仅包含a的列表以及似乎跟踪不再存在的远程分支的任何其他本地分支?

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

    该列表不应包含未跟踪远程分支的本地分支bd,也不应包括仍在其中的跟踪c的{​​{1}}。< / p>

4 个答案:

答案 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 '.'