Git:如何列出跟踪不再存在的远程分支的本地分支?
如何列出(按照Git:如何列出跟踪不再存在的远程分支的本地分支?,git,Git,如何列出(按照.git/config)显示为跟踪不再存在的远程分支的任何本地分支?在本例中,远程分支位于GitHub上,但我怀疑它们的位置与此无关 例如: 我有本地分支机构,a,b,c和d a正在跟踪origin/a和c正在跟踪origin/c b和d不跟踪远程分支 origin/a已合并回master,并在存储库清理过程中被删除;我不再需要保留本地分支a 如果本地分支a签出到工作树,则运行git fetch或git pull会导致错误您的配置指定从远程与ref'a'合并,但未提取此类ref。
.git/config
)显示为跟踪不再存在的远程分支的任何本地分支?在本例中,远程分支位于GitHub上,但我怀疑它们的位置与此无关
例如:
a
,b
,c
和d
a
正在跟踪origin/a
和c
正在跟踪origin/c
b
和d
不跟踪远程分支origin/a
已合并回master,并在存储库清理过程中被删除;我不再需要保留本地分支a
a
签出到工作树,则运行git fetch
或git pull
会导致错误您的配置指定从远程与ref'a'合并,但未提取此类ref。
a
和任何其他似乎正在跟踪不再存在的远程分支的本地分支的列表
我想确定这些,以便我可以删除我不再需要的过时的本地分支
该列表不应包括不跟踪远程分支的本地分支
b
或d
,也不应包括跟踪origin/c
的c
,这些分支仍然存在。要列出跟踪已删除远程分支的本地分支,您可以使用git remote prune--dry run
例如(假设您的远程存储库名为origin
):
您可以删除
--dry run
选项以从本地存储库中删除分支如果本地分支正在跟踪远程分支,您可以筛选分支列表,以便显示没有跟踪分支的分支,方法是:
git branch -vv | grep -v origin
这将提供有关分支上最后一次提交的一些额外信息,但您可以将其过滤掉
git branch -vv | grep -v origin | awk '{print $1}'
这将只打印不跟踪远程分支的分支的名称
git for-each-ref refs/heads --format='%(refname:short) %(upstream)' \
| awk 'NF==1'
我会的
NF
是awk的“字段数”,它的默认操作是打印。相关:您需要检查.git/config
文件,了解哪些分支配置了上游,以及它们是什么。假设一个本地分支机构有一个同名的上游,这会给你带来麻烦。我已经根据你的更新修改了你的问题,请检查它,如果修改仍然不正确,请回滚asking@STW你的修改并没有真正传达我的要求。我会再次修改这个问题。@SteveCrane很酷,你的编辑看起来不错。我很确定我下面修改过的答案是你需要的。阅读这篇文章,这听起来正是我需要的,但在尝试之后,我不确定它是否是。如果你的问题已经发生了根本性的变化,但这回答了这个特定的问题,那么你可以随时问另一个问题;)不,问题是一样的。我昨天没时间澄清了,现在就要澄清了。读了这篇文章,听起来就像是我所需要的,但试过之后,我不确定它是不是真的git分支——列表
结果包括a
,然后我运行了git remote prune origin
,上面说*[pruned]origin/a
。现在git branch--list
结果仍然包括a
,git checkout a
报告上游已经消失,并建议git branch--unset upstream
。我这样做了,可以在.git/config
中看到它不再跟踪,但本地分支仍然存在,我必须自己删除它。我所希望的结果是当地分行被删除。这个答案让我了解了一部分,我认为这个答案不正确。例如,当我运行命令时,我的输出是空的,但我有许多本地分支满足问题的标准。这肯定是OPs问题的答案,应该接受。当在git remote prune origin
命令后运行时,这似乎非常有效,谢谢!我使用xargs
将其输入git branch-D
以删除这些分支。@tom_mai78101我在git branch purge
命令中使用它。要使这样一个git
命令可用,请在路径中创建一个git branch puge
可执行文件,如下所示:。@antostyagun您的github要点丢失。@tom_mai78101我已公开了回购,请重试
LANG=en git branch --format='%(if:equals=gone)%(upstream:track,nobracket)%(then)%(refname:short)%(end)' | grep '.'
LANG=en git branch --format='%(if:equals=gone)%(upstream:track,nobracket)%(then)%(refname:short)%(end)' | grep '.'