Um script Bash simples e seguro para remover branches locais e remotos que já foram mergeados no branch principal remoto.
O git-clean é uma ferramenta que automatiza a limpeza de branches que já não são mais necessários. Ele identifica todos os branches locais que estão mergeados no branch principal configurado (main, master, production, etc.) e remove-os tanto do repositório local quanto do remoto, mantendo seu workspace organizado.
Este script é muito cuidadoso e só remove branches que estão realmente mergeados no branch principal configurado. Ele realiza dupla verificação antes de deletar qualquer branch, garantindo que você não perderá trabalho.
Na primeira execução, o script perguntará "Informe o nome do branch de produção:" para que você possa definir qual é o seu branch principal (ex: main, master, production). Essa configuração será salva em ~/.config/git-clean/settings.json e reutilizada nas próximas execuções.
- Sistema operacional Linux, macOS ou Unix-like
- Git instalado e configurado
curlinstalado (necessário para verificar a versão e atualizar o script)sha256suminstalado (necessário para verificar se o script está atualizado)- Permissões de administrador/sudo (para instalar o script globalmente)
# Clone ou baixe o repositório
git clone <url-do-repositorio> git-clean
cd git-clean
# Copie o script para o diretório bin
sudo cp git-clean.sh /usr/local/bin/git-clean
# Dê permissão de execução
sudo chmod +x /usr/local/bin/git-clean# Crie o diretório ~/bin se não existir
mkdir -p ~/bin
# Clone ou baixe o repositório
git clone <url-do-repositorio> git-clean
cd git-clean
# Copie o script
cp git-clean.sh ~/bin/git-clean
# Dê permissão de execução
chmod +x ~/bin/git-clean
# Adicione ~/bin ao PATH (adicione ao seu ~/.bashrc ou ~/.zshrc)
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcgit-clean --help
# Ou simplesmente
which git-cleangit-clean- Executa a limpeza de branches mergeadosgit-clean --helpougit-clean -h- Exibe a mensagem de ajudagit-clean --versionougit-clean -v- Exibe a versão atual do script e verifica se há atualizaçõesgit-clean --upgrade- Atualiza o script para a versão mais recente do GitHub
- Navegue até a raiz do seu projeto Git
- Certifique-se de estar em um diretório que contenha a pasta
.git - Execute o comando:
git-cleanPrimeira execução:
=== Configuração inicial ===
Informe o nome do branch de produção:
> main
Configuração salva em: /home/usuario/.config/git-clean/settings.json
=== Iniciando limpeza de branches mergeados no origin/main ===
Fazendo checkout no main e atualizando...
Already on 'main'
Already up to date.
Atualizando informações remotas...
Verificando branches locais (excluindo main e HEAD)...
...
A configuração será salva automaticamente e você não precisará informar novamente nas próximas execuções.
- Verifica configuração - Na primeira execução, pede o nome do branch principal e salva em
~/.config/git-clean/settings.json - Faz checkout no branch principal e atualiza (
git checkout <branch> && git pull) - Atualiza informações remotas (
git fetch --prune) - Identifica branches locais que estão mergeados no branch principal configurado
- Exclui branches especiais (branch principal,
HEAD, e branch atual marcado com*) - Verifica cada branch duas vezes antes de remover
- Deleta branch local (
git branch -d) - Deleta branch remoto se existir (
git push origin --delete)
Execução após configuração:
=== Iniciando limpeza de branches mergeados no origin/main ===
Fazendo checkout no main e atualizando...
Already on 'main'
Already up to date.
Atualizando informações remotas...
Verificando branches locais (excluindo main e HEAD)...
Branches locais mergeados no origin/main:
feature/login
feature/dashboard
feature/api-auth
Processando cada branch...
=== Branch: feature/login ===
✓ Confirmado: feature/login está mergeado em origin/main
Deletando branch local: feature/login
Deletando branch remoto: origin/feature/login
=== Branch: feature/dashboard ===
✓ Confirmado: feature/dashboard está mergeado em origin/main
Deletando branch local: feature/dashboard
Deletando branch remoto: origin/feature/dashboard
=== Branch: feature/api-auth ===
✓ Confirmado: feature/api-auth está mergeado em origin/main
Deletando branch local: feature/api-auth
Branch remoto origin/feature/api-auth não existe (ou já foi deletado)
=== Fim da limpeza de branches ===
=== Processo concluído ===
O script utiliza os seguintes comandos Git:
git branch --merged <branch-principal>- Lista branches mergeadosgit merge-base --is-ancestor- Verifica se um branch é ancestral do branch principalgit show-ref --verify- Verifica se um branch existegit branch -d- Deleta branch local (safe delete)git push origin --delete- Deleta branch remoto
Configuração:
- Armazena o nome do branch principal em
~/.config/git-clean/settings.json - Lê a configuração automaticamente em cada execução subsequente
- Dupla verificação: Cada branch é verificado duas vezes antes de ser removido
- Proteção de branches:
main,HEADe o branch atual nunca são removidos - Safe delete: Usa
git branch -dem vez degit branch -D(que força a deleção) - Feedback completo: Mostra tudo o que está sendo feito em tempo real
- Na primeira execução, você precisará informar o nome do seu branch principal (ex:
main,master,production) - A configuração é salva em
~/.config/git-clean/settings.jsone reutilizada automaticamente - Para alterar o branch principal configurado, edite o arquivo
~/.config/git-clean/settings.jsonou exclua-o e execute o script novamente - Certifique-se de ter as permissões necessárias para deletar branches no repositório remoto
- O script sempre finaliza fazendo checkout no branch principal configurado e atualizando-o
- Branches remotos que não existem mais (mas ainda aparecem localmente) são tratados corretamente
O script verifica automaticamente se há atualizações disponíveis quando você executa git-clean --version. Se o script local estiver desatualizado comparado com o GitHub, será exibida uma mensagem sugerindo a atualização.
Exemplo de saída quando há atualização:
git-clean v0.0.1
O seu script git-clean está desatualizado.
Entre com o comando git-clean --upgrade para atualizar.
Para atualizar o script:
git-clean --upgradeO comando --upgrade baixa a versão mais recente do script do GitHub e substitui a versão instalada no seu sistema.
O script cria automaticamente o arquivo ~/.config/git-clean/settings.json na primeira execução:
{
"main_branch": "main"
}Você pode editar manualmente este arquivo para alterar o branch principal configurado.
Alterar o branch principal configurado:
-
Opção 1 - Editar o arquivo de configuração:
nano ~/.config/git-clean/settings.jsonAltere o valor de
main_branchpara o desejado:{ "main_branch": "master" } -
Opção 2 - Reconfigurar:
rm ~/.config/git-clean/settings.json git-cleanO script pedirá novamente o nome do branch principal através do prompt "Informe o nome do branch de produção:".
Este projeto é de código aberto e está disponível para uso livre.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.