Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:如何列出跟踪不再存在的远程分支的本地分支?_Git - Fatal编程技术网

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