Удаление старых ненужных веток git

Лирическое отступление В текущем проекте у нас на почти каждую задачу приходится по отдельной git ветке и за недолгое время жизни проекта начали скапливаться ветки, которые уже давно находятся в релизе (ветка master). Я искал скрипт, который бы мог «почистить» ветки гита. Тем, более, что при удалении ветки мы знаем — есть ли в ней «несмерженные» коммиты.

Я нашел замечательный скрипт на сайте http://devblog.springest.com/a-script-to-remove-old-git-branches. Подробное описание можно найти на этой странице. Я лишь приведу свой вариант скрипта:


# This has to be run from master
echo git checkout master

# Update our list of remotes
echo git fetch
echo git remote prune origin

# Remove local fully merged branches
git branch --merged master | grep -v 'master\|hotfix$' | xargs git branch -d

# Show remote fully merged branches
echo "The following remote branches are fully merged and will be removed:"
git branch -r --merged master | sed 's/ *origin\///' | grep -v 'master\|hotfix$'

read -p "Continue (y/n)? "
if [ "$REPLY" == "y" ]
then
 # Remove remote fully merged branches
 git branch -r --merged master | sed 's/ *origin\///' \
 | grep -v 'master\|hotfix$' | xargs -i% git push origin :%
 echo "Done!"
 say "Obsolete branches are removed"
fi

Скрипт я положил в файл git-obsolete и теперь его можно смело запускать из git консоли. После запуска будут удалены старые ветки на локальном и удаленном репозитории.

2012.07.07