Quero excluir todos os ramos listados na saída de ...
$ git branch
... mas mantendo o branch atual, em uma única etapa . Isso é possível? Se sim, como?
git
git-branch
sensorario
fonte
fonte
Respostas:
Com base na resposta de @pankijs, criei dois aliases git:
Para ser adicionado em
~/.gitconfig
E, como @torek apontou:
Basicamente, nunca use a
-force
versão se não tiver 300% de certeza de que não perderá nada importante. Porque está perdido para sempre .fonte
git branch branchname commitid
irá deletar todos os branches exceto o master (substitua o master pelo branch que você deseja manter, mas então irá deletar o master)
fonte
grep -v ^*
.master-copy
, por exemplogrep -v "^ *master$"
grep -v "master\|my-other-branch"
.primeiro (mude para o branch que deseja manter> ex : master ):
segundo ( certifique - se de que você está no mestre )
fonte
git branch -D $(git branch).Trim()
.git branch -d
(ou-D
) permite vários nomes de branch, mas é um pouco complicado fornecer automaticamente "todos os branches locais, exceto aquele em que estou agora" sem escrever pelo menos um pouco de código.O "melhor" método (formalmente correto) é usar
git for-each-ref
para obter os nomes dos ramos:mas então é ainda mais difícil descobrir em qual branch você está (
git symbolic-ref HEAD
é o método "formalmente correto" para isso, se você quiser escrever um script sofisticado).Mais convenientemente, você pode usar o
git branch
, que imprime os nomes dos seus ramos locais precedidos por dois espaços ou (para o ramo atual) por um asterisco*
. Então, execute isso por meio de algo para remover a*
versão e você ficará com nomes de branch separados por espaço, que você pode então passar paragit branch -d
:ou:
Observe que letras minúsculas
-d
não excluirão um branch "não totalmente mesclado" (consulte a documentação). Usar-D
irá deletar tais branches, mesmo que isso faça com que os commits se tornem "perdidos"; use isso com muito cuidado, pois isso exclui os reflogs do branch também, de forma que as coisas usuais de "recuperação de exclusão acidental" também não funcionem.fonte
git branch -D $(git branch | grep -v '^*')
, se você quiser deletar aquelas ramificações que foram mescladas.Para remover todas as ramificações mescladas (exceto as atuais
-v ‘*’
):também fiz esse comando para limpeza completa do repo:
tirado daqui .
fonte
Exclua todos os ramos, exceto um ramo específico :
Exclua todos os branches locais, exceto Develop e Master
fonte
Para Windows, no Powershell use:
fonte
Exclua todas as ramificações mescladas localmente:
Exclua todos os ramos, exceto um ramo específico :
Exclua todos os branches locais, exceto Develop e Master
fonte
Certa vez, criei essa construção para meu ambiente Windows. Talvez ajude outra pessoa. Durante a execução, o master e o branch atual não são excluídos . Todas as outras ramificações mescladas serão excluídas independentemente.
fonte
Para excluir todos os branches, exceto o branch atual em uma etapa:
git branch | grep -v $(git rev-parse --abbrev-ref HEAD) | xargs git branch -D
fonte
Assumindo que
git branch
mostra o branch atual prefixado com*
; Usando o Powershell, o seguinte liner excluirá todos os branches que não começam com*
.git branch | ? { $_ -lt "*" } | % { git branch -D $_.Trim() }
?
= Where-Object%
= Foreach-Objectfonte
Portanto, vejo muitos nomes de branch codificados aqui ... E acho que minha resposta aqui é mais precisa para a parte "branch atual" da pergunta, mantendo-a em uma única linha e legível para iniciantes como eu. Apenas para colocar o crédito onde é devido, a resposta é obviamente também baseada na resposta de @pankijs.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
e eu tenho um alias em uma linha em meu .bash_aliases no debian também.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(Embora eu ache que alguns recursos do bash precisam ser habilitados para que o subcomando seja executado em algumas linhas de comando)
fonte
Uso isso porque consigo ser mais seletivo no que não quero excluir. O comando abaixo remove todos os ramos, exceto master, desenvolver e o ramo atual.
Então eu coloquei isso no meu
~/.zshrc
fonte
IMHO, a maneira mais segura de remover filiais locais é:
Além disso, mais informações relacionadas a este tópico você pode encontrar Delete all git branches locais
fonte
gone
marcador que você deve usar-vv
(verbose duas vezes), embora-a
não vá ajudá-lo (ele lista também branches remotos)