Я хочу удалить все ветки, перечисленные в выводе ...
$ git branch
... но сохраняя текущую ветку за один шаг . Это возможно? Если да, то как?
git
git-branch
сенсорарио
источник
источник
Ответы:
Основываясь на ответе @pankijs, я сделал два псевдонима git:
Будет добавлено в
~/.gitconfig
И, как отметил @torek:
По сути, никогда не используйте
-force
версию, если вы не уверены на 300%, что не потеряете ничего важного. Потому что это потеряно навсегда .источник
git branch branchname commitid
удалит все ветки, кроме master (замените master веткой, которую вы хотите сохранить, но затем она удалит мастер)
источник
grep -v ^*
.master-copy
, например, неgrep -v "^ *master$"
grep -v "master\|my-other-branch"
.сначала (переключитесь на ветку, которую вы хотите сохранить> ex : master ):
второй (убедитесь, что вы на главном )
источник
git branch -D $(git branch).Trim()
.$(git branch)
в кавычки? Это не работает: ошибка: ветка «$ (git» не найдена. Ошибка: ветка «ветка)» не найдена.git branch -d
(или-D
) позволяет использовать несколько имен веток, но немного сложно автоматически предоставить «все локальные ветки, за исключением той, в которой я сейчас работаю», не написав хотя бы немного кода."Лучший" (формально правильный) метод -
git for-each-ref
получить имена веток:но тогда еще труднее определить, в какой ветке вы находитесь (
git symbolic-ref HEAD
это «формально правильный» метод для этого, если вы хотите написать необычный сценарий).Более удобно, вы можете использовать
git branch
, который печатает имена ваших локальных веток, которым предшествуют два пробела или (для текущей ветки) звездочка*
. Итак, пропустите это через что-нибудь, чтобы удалить*
версию, и у вас останутся имена веток, разделенных пробелами, которые вы затем можете передатьgit branch -d
:или:
Обратите внимание, что строчные буквы
-d
не удаляют «не полностью объединенную» ветку (см. Документацию). Использование-D
приведет к удалению таких ветвей, даже если это приведет к потере фиксации; используйте это с большой осторожностью, так как при этом удаляются также и рефлоги веток, так что обычные вещи «восстановление после случайного удаления» тоже не работают.источник
git branch -D $(git branch | grep -v '^*')
, если вы хотите удалить те ветки, которые слились.Чтобы удалить все объединенные ветки (кроме текущей
-v ‘*’
):Также я сделал такую команду для полной очистки репо:
взято отсюда .
источник
Удалите все ветки, кроме определенной :
Удалите все локальные ветки, кроме разработки и мастера
источник
Для Windows в Powershell используйте:
источник
Однажды я создал эту конструкцию для своей среды Windows. Может быть, это поможет кому-то другому. Во время выполнения главная и текущая ветки не удаляются . Все остальные объединенные ветки будут удалены независимо.
источник
Чтобы удалить все ветки, кроме текущей, за один шаг:
git branch | grep -v $(git rev-parse --abbrev-ref HEAD) | xargs git branch -D
источник
Удалить всю объединенную ветку локально:
Удалите все ветки, кроме определенной :
Удалите все локальные ветки, кроме разработки и мастера
источник
Предполагая,
git branch
показывает текущую ветку с префиксом*
; Используя Powershell, следующий лайнер удалит все ветки, которые не начинаются*
.git branch | ? { $_ -lt "*" } | % { git branch -D $_.Trim() }
?
= Где-Объект%
= По каждому объектуисточник
Итак, я вижу здесь много жестко закодированных имен веток ... И я думаю, что мой ответ здесь более точен для части вопроса о «текущей ветке», при этом он остается одной строкой и удобочитаем для таких новичков, как я. Просто чтобы отдать должное, ответ, скорее всего, также основан на ответе @pankijs.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
и у меня есть псевдоним в одной строке в моих .bash_aliases в debian.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(Хотя я думаю, что некоторые функции bash должны быть включены для запуска подкоманды в некоторых командных строках)
источник
Я использую это, потому что могу более избирательно подходить к тому, что не хочу удалять. Эта команда ниже удаляет все ветки, кроме главной, разработки и текущей ветки.
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D) echo $BRANCHES
Я положил это в свой
~/.zshrc
источник
ИМХО, самый безопасный способ удаления локальных веток:
Кроме того, дополнительную информацию по этой теме вы можете найти в разделе Удаление всех локальных веток git.
источник
gone
маркер, который вы должны использовать-vv
(подробно дважды),-a
это не поможет вам (в нем перечислены также удаленные ветки)