Список веток git, которые можно безопасно удалить - PullRequest
24 голосов
/ 01 марта 2010

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

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

Ответы [ 2 ]

32 голосов
/ 01 марта 2010

Попробуйте:

$ 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
4 голосов
/ 02 марта 2010

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...