Voltar
Como excluir todas as branches locais, exceto a atual?
Aprenda a remover com segurança as branches locais que não está usando e manter apenas a branch atual.
- Publicado em
- Tempo de leitura
- 3 min de leitura
Ao executar git branch no repositório local, é comum encontrar branches de trabalhos já concluídos. Este comando ajuda a limpar as branches locais e preservar apenas aquela em que você está.
O comando
Em repositórios novos, a branch principal costuma se chamar main. Ainda assim, em vez de depender desse nome, o comando abaixo identifica e preserva automaticamente a branch atual:
Atenção
O comando remove somente branches locais. Comece com -d,
que apaga apenas branches já integradas. Use -D apenas se
tiver certeza de que também quer remover branches não integradas.
current_branch=$(git branch --show-current)
if [ -z "$current_branch" ]; then
echo "Faça checkout de uma branch antes de continuar."
exit 1
fi
git branch --format="%(refname:short)" |
while IFS= read -r branch; do
[ "$branch" = "$current_branch" ] || git branch -d "$branch"
doneO comando funciona no Git Bash, no macOS e em terminais Bash/Linux. Ele não altera branches remotas, como origin/main.
Se você realmente precisar apagar branches que ainda não foram integradas, troque git branch -d "$branch" por git branch -D "$branch" depois de conferir o que será removido.
Atalho de uma linha para manter a main
Se você está na main e quer manter somente ela, o atalho continua muito prático:
git branch --format="%(refname:short)" | grep -vx "main" | xargs git branch -DEle é a versão atualizada do conhecido git branch | grep -v "main" | xargs git branch -D: remove todas as branches locais, exceto main, em uma linha. Use-o apenas quando a branch que deve sobreviver for realmente a main e você estiver nela.
O --format e o grep -x fazem a comparação pelo nome completo. Assim, uma branch como feature/main-layout não fica preservada por acidente. Como -D força a exclusão de branches não integradas, você pode trocar por -d para uma limpeza conservadora.
Confira antes de apagar
Para listar as branches que seriam removidas, sem apagar nada, execute:
current_branch=$(git branch --show-current)
git branch --format="%(refname:short)" |
while IFS= read -r branch; do
[ "$branch" = "$current_branch" ] || echo "$branch"
donePor exemplo, se você estiver em main, a listagem poderá ser:
feature/login
fix/menu-mobileEntendendo o comando
git branch --show-current
Retorna o nome da branch atual, por exemplo, main. Em um estado de HEAD destacado (detached HEAD), ele não retorna nada; por isso o script interrompe a execução nesse caso, evitando uma limpeza acidental.
git branch --format="%(refname:short)"
Lista os nomes das branches locais sem o asterisco que identifica a branch atual na saída normal de git branch. Isso torna a comparação precisa, inclusive para nomes como main, feature/main-layout e maintenance.
O loop while
O loop lê cada branch e executa a remoção somente quando o nome é diferente de current_branch. Assim, ele preserva exatamente a branch atual, independentemente de ela se chamar main ou ter outro nome.
git branch -d e git branch -D
git branch -d <nome>: remove uma branch apenas quando ela já foi integrada à branch atual ou à sua upstream.git branch -D <nome>: força a remoção, mesmo sem integração. Commits que ficarem sem referência podem ser mais difíceis de recuperar depois que o reflog expirar.
PowerShell
No PowerShell, use o equivalente abaixo. Permaneça na branch que deseja manter — normalmente, main:
$currentBranch = git branch --show-current
if (-not $currentBranch) {
throw "Faça checkout de uma branch antes de continuar."
}
git branch --format="%(refname:short)" |
Where-Object { $_ -ne $currentBranch } |
ForEach-Object { git branch -d $_ }Para forçar a remoção de branches não integradas no PowerShell, substitua git branch -d $_ por git branch -D $_ somente após revisar a lista.
Isso é tudo! 😊
Referências: documentação oficial do git branch.
