Как удалить все удаленные ветки git, которые уже были интегрированы? - PullRequest
30 голосов
/ 22 ноября 2011

На работе мы используем тематические ветки, которые в какой-то момент интегрированы в несколько (3) основных веток.Теперь я хочу удалить все ветки тем из моего репозитория remote , которые полностью интегрированы в основную ветку.Если это невозможно, то поиск списка локальных филиалов, которые были интегрированы, тоже подойдет.

Ответы [ 5 ]

41 голосов
/ 22 ноября 2011

Еще один ответ, отредактированный кем-то, кто считал, что он лучший (и выглядит хорошо) :

git branch -r --merged origin/master | grep -v master | grep "origin/" | cut -d "/" -f 3- | xargs -n 20 git push --delete origin

Пояснение:

  • git branch -r --merged origin/master
    • -r / --remotes список ветвей удаленного слежения.
    • --merged origin/master только список ветвей, чьи подсказки доступны с origin/master.
  • grep -v master удалить любое имя ветви, содержащее master из списка. 1 -v означает отрицательное совпадение.
  • grep "origin/" выбор только филиалов на origin пульте.
  • cut -d "/" -f 2- сбросить префикс origin/
  • xargs -n 20 git push --delete origin сделать что-то похожее на git push --delete origin branch-a branch-b branch-c …
    • -n 20 / --max-args=20 использовать не более 20 аргументов в командной строке.

Что касается -n, я выбрал 20 в качестве примера. Меньшее количество аргументов сделает его медленнее, например, -n 1 заставляет его удалять по одному; у вас есть больше подсказок о прогрессе, потому что он будет сообщать каждый раз, когда удаляет ветку. Дополнительные аргументы, такие как -n 200, сделают его быстрее (меньше общего времени), но он сообщает только один раз каждые 200 веток, что заставляет вас думать, что сначала он заморожен (а это не так). Настройте номер под свои нужды. Если вы не включите эту опцию, номер по умолчанию будет очень большим (2048 на моем компьютере).

1. Обратите внимание, что это также удаляет origin/HEAD -> origin/master, но вы все равно не захотите связываться с origin/HEAD.

Оригинальный ответ:

git push --delete remote topicbranch

или

git push remote :topicbranch

Дать список веток, было бы что-то с git branch --merged master

14 голосов
/ 23 ноября 2011

Вы можете сделать это за один раз с

git branch --merged master | grep -v master | xargs -n 1 git push --delete origin

Скопируйте это в скрипт под названием 'clean', если вы обнаружите, что делаете это часто.

11 голосов
/ 04 апреля 2014

Если вы хотите удалить удаленные ветки из исходного репозитория:

git branch -r --merged develop | egrep -iv '(master|develop)' | sed 's/origin\///g' | xargs -n 1 git push --delete origin
1 голос
/ 01 марта 2018

Только для пользователей Powershell и Windows.

    git branch -r --merged  | findstr /v "origin/master" | %{git push origin --delete $_.Trim().Substring(7)}
1 голос
/ 11 марта 2016

Это команды, которые я использую для удаления всего, сливаются в origin/master. По сути, я удаляю все ветви, объединенные в master с GitHub.

git remote update -p &&
git branch -r --merged origin/master |
grep origin |
grep -v master |
cut -d"/" -f2- |
xargs git push origin --delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...