Я хотел бы, чтобы очистить свой локальный репозиторий, который имеет кучу старых ветвей: например 3.2
, 3.2.1
, 3.2.2
и т.д.
Я надеялся на хитрый способ убрать их сразу. Поскольку они в основном следуют соглашению о точечном выпуске, я подумал, что, возможно, есть ярлык, чтобы сказать:
git branch -D 3.2.*
и убить все ветви 3.2.x.
Я попробовал эту команду, и она, конечно, не сработала.
git branch -D $(git branch | grep 3.2*)
- это сработало для меня. Удаляет ветки, название которых начинается с «3.2».grep
- сопоставление с образцом на выходе (git branch
в данном случае).$()
- означает выполнить и разместить результат.|
- цепочки.-D
такое принудительное удаление, следует использовать-d
в большинстве случаев в первую очередь безопаснее.Ответы:
Не с этим синтаксисом. Но вы можете сделать это так:
По сути, git branch удалит несколько веток за вас одним вызовом. К сожалению, это не делает завершение имени ветви. Хотя в bash вы можете сделать:
источник
git branch -D/-d
работе отлично работает для меня. Возможно, вы захотите обновить свой (возможно, из самой последней директории git.git contrib).git branch | ...
вы могли использовать$(git for-each-ref --format='%(refname:short)' refs/heads/3.*)
. Я знаю, что он длиннее, но гарантированно будет подходящим выводом, но в то же времяgit branch
будет хорош с такими вещами, как*
и->
(для symrefs), которые могут запутать вас в скриптах / однострочниках.grep
всегда включал флаг--color=always
-git branch -D
бросал,error: branch 'my_branch' not found.
пока не побежал без цветного флага.git branch --merged ${1-$(current_branch)} | grep -v ${1-$(current_branch)} | xargs git branch -d
git branch -D 3.2{,.1,.2}
чтобы удалить все три ветви gnu.org/software/bash/manual/html_node/Brace-Expansion.htmlНу, в худшем случае, вы можете использовать:
источник
| xargs git branch -d
части, чтобы проверить, что на самом деле будет удалено.grep
выводитьgit branch
, так как он предназначен для чтения, а не для разбора. Может измениться в любое время. используйтеfor-each-ref
вместе с--format
параметрами, как предлагается в других ответах, а затем объедините с предложениями в этом ответе.РЕДАКТИРОВАТЬ:
Более безопасная версия (предложенная Jakub Narębski и Jefromi), так как вывод ветки git не предназначен для использования в скриптах:
... или без xargs:
источник
git branch
вывод для сценариев. Использованиеgit for-each-ref
.git for-each-ref --format="%(refname:short)" refs/tags/\*@\* | xargs git tag -d
If one or more patterns are given, only refs are shown that match against at least one pattern, either using fnmatch(3) or literally, in the latter case matching completely or from the beginning up to a slash
-D
такое принудительное удаление, следует использовать-d
в большинстве случаев в первую очередь безопаснее.Вы можете использовать git branch --list, чтобы вывести список подходящих веток, и использовать git branch -D / -d, чтобы удалить подходящие ветки.
Один пример лайнера:
источник
error: branch 'package.json' not found.
. Кажется, что * раскрывается слишком рано, и он пытается удалить ветку, соответствующую имени каждого файла и каталога.gitconfig
хотя ...git branch --list '3.2.*'
git branch -d (git branch --list '3.2.*').trim()
Недавно я искал решение той же проблемы, наконец, я нашел один ответ, и он работает очень хорошо:
Это отличное решение, и если вы хотите получить полное объяснение каждой команды и того, как она работает, оно дано здесь .
источник
использование
источник
alias grefs='git for-each-ref --format="%(refname:short)"'
чтобы я мог сделатьgrefs | grep 'regexpattern' | xargs git branch -D
Может быть, вы найдете это полезным:
Если вы хотите удалить все ветви, которые не являются, например, «master», «foo» и «bar»
grep -v 'что-то' это совпадение с инверсией.
источник
-D
вариант сравнить с другим ответом. Спасибо за ответ здесь @Adi. Решения работает для меня.Я поставил свои инициалы и тире (at-) в качестве первых трех символов имени ветви по этой точной причине:
источник
Если вы не ограничены использованием командной строки git, то вы всегда можете запустить
git gui
и использовать пункт меню Branch-> Delete. Выберите все ветви, которые вы хотите удалить, и дайте ему разорваться.источник
Решение Powershell:
Если вы используете Windows, вы можете использовать PowerShell для удаления нескольких веток одновременно ...
Вы также можете точно настроить, как должно работать сопоставление с образцом, используя команду Select-String от Powershell. Посмотрите на документы PowerShell .
источник
Держите "развиваться" и удалять все остальные в локальном
источник
Я сделал небольшую функцию, которая может быть полезна, основываясь на ответе @gawi (выше).
Добавьте это к своему
.bash_profile
и перезапустите свой терминал. Затем вы можете позвонить из командной строки следующим образом:Запись
В настоящее время он настроен на мягкое удаление, что означает, что он не будет удалять ветви, если они не были объединены. Если вам нравится жить на грани, измените
-d
на-D
и он все удалит с префиксом независимо от!источник
Если вам действительно нужно почистить все свои ветки, попробуйте
git branch -d $(git branch)
Он удалит все ваши локальные объединенные филиалы, кроме той, которую вы сейчас регистрируете.
Это хороший способ сделать ваш район чистым
источник
Вам может понравиться этот маленький элемент ... Он тянет список и запрашивает подтверждение каждого элемента, прежде чем окончательно удалить все выбранные элементы ...
Используйте -D для принудительного удаления (как обычно).
Для удобства чтения, вот что разбито построчно ...
вот подход XARGS ...
наконец, мне нравится иметь это в моем .bashrc
Таким образом, я могу просто сказать,
источник
Для чистых душ, которые используют PowerShell, здесь небольшой скрипт
git branch -d $(git branch --list '3.2.*' | %{$_.Trim() })
источник
у меня работает правильно
удалить все локальные филиалы
источник
Используйте следующую команду, чтобы удалить все ветви (извлеченные ветви не будут удалены).
Изменить: я использую Mac Os
источник
Если вы находитесь на Windows, вы можете использовать PowerShell для этого:
замените
feature/*
любой шаблон, который вам нравится.источник
Вы можете использовать эту команду:
git branch -D $(printf "%s\n" $(git branch) | grep '3.2')
источник
Вы можете использовать
git gui
для удаления нескольких веток одновременно. Из командной строки / Bash ->git gui
-> Удаленный -> Удалить ветку ... -> выберите удаленные ветви, которые вы хотите удалить -> Удалить.источник
Я только что убрал большой набор устаревших локальных / удаленных филиалов сегодня.
Вот как я это сделал:
1. перечислите все имена ветвей в текстовый файл:
git branch -a >> BranchNames.txt
2. добавьте ветви, которые я хочу удалить, к команде "git branch -D -r":
git branch -D -r origin / dirA / branch01 origin / dirB / branch02 origin / dirC / branch03 (... добавлять любые имена ветвей)
3. выполнить cmd
И этот работает намного быстрее и надежнее, чем " git push origin --delete ".
Это может быть не самый умный способ, как указано в других ответах, но этот довольно простой и простой в использовании.
источник
Если вы установили Git GUI, который является надстройкой по умолчанию для Windows, то он самый простой. Вы можете использовать Ctrl, чтобы выбрать несколько веток и удалить их одним щелчком мыши.
источник
Если вы используете оболочку Fish, вы можете использовать
string
функции :Это не сильно отличается от параметров Powershell в некоторых других ответах.
источник
Если у вас есть все ветви, которые нужно удалить в текстовом файле (branch-to-del.txt) (по одной ветви на строку), вы можете сделать это, чтобы удалить все такие ветви с удаленного компьютера (origin):
xargs -a branches-to-del.txt git push --delete origin
источник
Чтобы удалить несколько веток на основе указанного шаблона, сделайте следующее:
Откройте терминал или его эквивалент и введите следующие команды:
Удалите все ветки 3.2.x, которые вам нужно набрать
Это все!
Вы хороши, чтобы пойти!
источник
Так как в Git все ветки являются ничем по ссылкам
.git/ref
на репозиторий git, почему бы вам просто не удалить идущие ветки, и тогда, если что-то пропущено, что не интересно в репозитории, автоматически соберется мусор, так что вы не будете надо беспокоитьисточник
git branch -D <branchName>
источник
Вы можете удалить все ветви, удалив все ненужные ссылки:
rm .git/refs/heads/3.2.*
источник
git gc
). Не делай этого.