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

时间:2010-03-01 04:00:24

标签: git

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

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

2 个答案:

答案 0 :(得分:32)

尝试:

$ git checkout master # or whatever branch you might compare against ...
$ git branch --no-merged
$ git branch --merged

来自git branch documentation

  

使用--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

答案 1 :(得分:4)

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

  

<强>描述

   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.