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

20

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

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

задан asmeurer 01.03.2010 в 05:00
источник

2 ответа

28

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 }''; \
do echo "[$branch]"; git checkout -q $branch; git branch --merged; done

[broken]
* broken
[master]
* master
[next]
master
* next
[experimental]
master
next
* experimental
    
ответ дан miku 01.03.2010 в 05:04
источник
  • Я предполагаю, что у вас есть br как ярлык для ветки :). Это работает. Теперь, как это сделать для каждой ветки, так что я могу получить хороший список ветвей, которые я могу удалить. Кроме того, это показывает удаленные ветви, которых я не хочу. –  asmeurer 01.03.2010 в 05:32
  • Отлично. Я решил, что для этого потребуется некоторый сценарий оболочки. Хотя я не знаю sed или awk, поэтому я рад, что вы его написали. Я думаю, что я изменю свой сценарий, чтобы не показать ветвь самой под каждой ветвью и дать первую строку сообщения фиксации для HEAD каждой ветви, чтобы мне было легче видеть, на что указывает каждая ветка. Может быть, дата каждого совершения тоже. –  asmeurer 01.03.2010 в 17:35
  • Это может быть улучшено (используйте ветку вместо br и checkout вместо co, и чтобы сценарий не показывал ту же ветку, в которой вы находитесь), но она сделала то, что я хотел, поэтому я буду отмечать ее как ответ. –  asmeurer 18.06.2010 в 07:10
  • отредактировано для удаления ярлыков –  carl 24.01.2014 в 02:35
3

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.
    
ответ дан Pat Notz 02.03.2010 в 15:29
источник