列出可以安全删除的git分支

asm*_*rer 26 git

如果这样做git branch -d branchname,它将删除分支名称,如果它引用了历史记录中的早期提交,或者告诉您需要-D另外使用.我经常创建稍后被推送到master的分支,因此可以通过此标准删除.有没有一种简单的方法可以列出所有指向master的早期提交的分支,也就是git不介意只删除-d选项的分支?奖励积分如果它适用于所有分支,而不仅仅是主.

我有82个本地分支机构,我知道如果不是大多数分支机构现在可以安全删除,但我不想花时间通过每个分支机构来尝试这样做.

mik*_*iku 33

尝试:

$ git checkout master # or whatever branch you might compare against ...
$ git branch --no-merged
$ git branch --merged
Run Code Online (Sandbox Code Playgroud)

git分支文档:

使用--merged,将仅列出合并到命名提交的分支(即,可以从命名提交到达提示提交的分支).使用--no-merged时,仅列出未合并到命名提交的分支.如果参数缺失,则默认为HEAD(即当前分支的尖端).

编辑:

要为每个分支显示此信息,您可以执行以下操作:

示例回购:

o <--- experimental
|
o
|
o <--- next
|
o
|
o <--- master
|
o----o <--- broken
|
o
|


$ for branch in `git branch --no-color --verbose | \
sed -e 's/*//' | awk '{print $1}'`; \
do echo "[$branch]"; git checkout -q $branch; git branch --merged; done

[broken]
* broken
[master]
* master
[next]
master
* next
[experimental]
master
next
* experimental
Run Code Online (Sandbox Code Playgroud)

  • 这可以改进(使用`branch`而不是`br`和`checkout`而不是`co`,并使脚本不显示你所在的分支),但它做了我想要的,所以我会标记它作为答案. (2认同)

Pat*_*otz 6

git show-branch是一个鲜为人知但非常有用的工具,可以直观地显示每个分支独有的提交。一开始可能很难破译,但一旦你理解了输出,它就非常有用。有一个简短但很好的介绍

描述

   Shows the commit ancestry graph starting from the commits named
   with <rev>s or <globs>s (or all refs under refs/heads and/or
   refs/tags) semi-visually.

   It cannot show more than 29 branches and commits at a time.
Run Code Online (Sandbox Code Playgroud)