Список git ветвей, которые можно безопасно удалить

Если вы выполните git branch -d branchname, оно удалит имя ветки, если оно ссылается на более раннее фиксацию в вашей истории, или сообщит вам, что вам нужно использовать -D в противном случае. Я часто создаю ветки, которые затем перенаправляются на мастер, и поэтому этот критерий может быть удален. Есть ли простой способ перечислить все ветки, которые указывают на более ранние фиксации мастера, т.е. Ветви, которые git не будут против удаления только с помощью параметра -D? Бонусные очки, если он работает для всех ветвей одновременно, а не только для мастера.

У меня есть 82 локальных ветки, и я знаю, что довольно много, если не большинство из них можно безопасно удалить до сих пор, но я не хочу тратить время, чтобы пройти через каждый, чтобы попытаться это сделать.

Ответ 1

Try:

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

От git отраслевая документация:

С -merged будут перечислены только ветки, объединенные в именованный фиксатор (т.е. ветки, чьи концы достигают достижимости от именованного коммита). С --no-merged будут перечислены только те ветки, которые не объединены в именованный коммит. Если аргумент отсутствует, по умолчанию используется HEAD (т.е. Кончик текущей ветки).

EDIT:

чтобы показать это для каждой ветки, вы можете сделать что-то вроде этого:

Пример репо:

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

Ответ 2

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.