Допустим, у меня есть пульт с именем upstream и origin (стиль GitHub, мой форк - origin, upstream - upstream).
Я не хочу удалять ЛЮБЫЕ мастера, HEAD или что-либо из вышестоящего. Я также не хочу удалять ветку разработки, так как это наша общая ветка, из которой мы создаем PR.
Список всех удаленных веток, отфильтрованных по тем, которые были объединены:
git branch -r
Удалить строки из этого списка, содержащие слова, которые, как я знаю, находятся в названиях ветвей, которые я не хочу удалять:
sed '/develop\|master\|HEAD\|upstream/d'
Удалить удаленное имя из ссылочного имени (origin / somebranch становится somebranch):
sed 's/.*\///'
Используйте xargs для вызова однострочника:
xargs git push --delete origin
Соедините все вместе, вы получите:
git branch -r --merged | sed '/develop\|master\|HEAD\|upstream/d' | sed 's/.*\///' | xargs git push --delete origin
Это оставит мне только некоторые ветви, над которыми я работал, но не слился. Затем вы можете удалить их один за другим, так как их не должно быть слишком много.
Найдите ветки, которые вам больше не нужны:
git branch -ar
Скажем, вы нашли branch1, branch2 и branch3, которые хотите удалить:
git push --delete origin branch1 branch2 branch3