删除跟踪分支不再在远程

是否有一种简单的方法可以删除远程等效不再存在的所有跟踪分支?

例:

分支机构(本地和远程)

  • 产地/主

  • 产地/漏洞修复,一个

  • 产地/漏洞修复-B

  • 产地/漏洞修复-C

在本地,我只有一个主分支。现在我需要处理bug-fix-a,所以我检查它,处理它,并将更改推送到远程。接下来我用bug-fix-b做同样的事情。

分支机构(本地和远程)

  • 漏洞修复,一个

  • 漏洞修复-B

  • 产地/主

  • 产地/漏洞修复,一个

  • 产地/漏洞修复-B

  • 产地/漏洞修复-C

现在我有本地分支机构masterbug-fix-abug-fix-b。Master分支维护者将我的更改合并到master中并删除他已经合并的所有分支。

那么现在的状态是:

分支机构(本地和远程)

  • 漏洞修复,一个

  • 漏洞修复-B

  • 产地/主

  • 产地/漏洞修复-C

现在我想调用一些命令删除分支(在本例中为bug-fix-abug-fix-b),这些分支不再在远程存储库中表示。

它会像现有的命令git remote prune origin,但更像是git local prune origin


蛊毒传说
浏览 741回答 3
3回答

哆啦的时光机

命令之后git fetch -p运行时删除远程引用git branch -vv它将显示为“已离开”作为远程状态。例如,$ git branch -vv  master                 b900de9 [origin/master: behind 4] Fixed bug  release/v3.8           fdd2f4e [origin/release/v3.8: behind 2] Fixed bug  release/v3.9           0d680d0 [origin/release/v3.9: behind 2] Updated comments  bug/1234               57379e4 [origin/bug/1234: gone] Fixed bug因此,您可以编写一个简单的脚本来删除已经转移的本地分支:git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done

慕田峪7331174

这些答案中的大多数实际上并未回答原始问题。我做了一堆挖掘,这是我找到的最干净的解决方案。这是一个稍微更全面的答案:查看您的默认分支。平时git checkout master跑 git fetch -p && git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -d说明:通过修剪您的跟踪分支然后删除显示它们“消失”的本地分支来工作git branch -vv。笔记:如果您的语言设置为英语以外的其他语言,则需要更改gone为相应的单词。不会触及仅限本地的分支。已在远程删除但未合并的分支将显示通知但不会在本地删除。如果你想删除那些以及更改-d为-D。
打开App,查看更多内容
随时随地看视频慕课网APP