【问题标题】:Delete branches listed by git branch -a删除 git branch -a 列出的分支
【发布时间】:2011-11-01 11:38:30
【问题描述】:

命令git branch -a 列出了一堆不在存储库中的分支,而不是本地分支。如何删除这些?

* develop
  master
  remotes/origin/cloner

例如,remotes/origin/cloner 曾经存在于 repo 中,但它已被删除,我希望在输入 git branch -a 时不要出现它。

【问题讨论】:

    标签: git


    【解决方案1】:

    如果您有远程跟踪分支(如本例中的origin/cloner)在远程存储库中删除相应分支后留下,您可以删除所有此类远程跟踪分支:

    git远程修剪起源

    documentation for git remote 解释为:

    删除 下所有过时的远程跟踪分支。这些陈旧的分支已从 引用的远程存储库中删除,但仍可在本地“remotes/”中使用。

    使用--dry-run 选项,报告将修剪哪些分支,但实际上并不修剪它们。

    【讨论】:

    • 值得对此进行扩展,也许只是通过引用和链接到文档。
    【解决方案2】:

    要删除不再需要的分支,您可以使用以下命令:

    git branch -d -r origin/cloner
    

    【讨论】:

    • 这必须是git branch -d -r origin/cloner,因为origin/cloner 是一个远程跟踪分支。
    【解决方案3】:

    你也这样做

    git push origin :cloner 
    

    删除不需要的远程分支

    【讨论】:

    • 在这种情况下,分支cloner已经从远程存储库中删除了,所以这会产生错误。问题是如何删除远程跟踪分支origin/cloner,这是有人在origin 中删除cloner 后留下的。
    • 我明白了。那么,一个 git fetch 不会只是刷新远程分支列表吗?
    【解决方案4】:

    如果您想保留 maindevelop 分支并从 git 存储库中删除所有本地分支,那么这可能会有所帮助。

    删除所有本地分支除了 ma​​indevelop

    git branch -a | egrep -v "(^\*|main|develop)" | xargs git branch -d

    【讨论】:

      【解决方案5】:

      也可能发生远程存储库引用已从本地克隆中删除,但仍出现在“git branch -a”命令的输出中。 在任何情况下,您都可以通过删除相应的文件来抑制任何引用:

      $ rm -f .git/refs/remotes/cloner
      $ rm -rf .git/refs/remotes/deprecated_remote
      

      【讨论】:

      • 直接从.git 下删除文件而不是使用瓷器命令这样做是个坏主意。
      • Git 非常健壮。必须编辑 .git/config 文件通常非常方便,例如为给定分支添加跟踪或更改远程存储库的 URL。通过直接查看引擎盖,曾经可以更轻松地了解 Git 的工作原理,并意识到它与第一次出现时一样神奇。所以,我不建议每个人都在后台编辑 Git 文件,但我会建议他们至少在这些文件中拥有战利品。在最低限度,它非常有指导意义。
      猜你喜欢
      • 2019-07-08
      • 2011-07-02
      • 1970-01-01
      • 2019-09-28
      • 2019-05-18
      • 2013-05-23
      • 2020-04-12
      • 2012-10-16
      相关资源
      最近更新 更多