Git Clean
#Git Clean
Um script Bash simples e seguro para remover branches locais e remotos que já foram mergeados no branch principal remoto.
#📋 Sobre
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.
#⚠️ Importante
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.
#📦 Pré-requisitos
- 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)
#🔧 Instalação
#Método 1: Instalar no /usr/local/bin (Requer sudo)
# 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
#Método 2: Instalar no ~/bin (Sem sudo)
# 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 ~/.bashrc
#Verificar instalação
git-clean --help # Ou simplesmente which git-clean
#🚀 Como Usar
#Comandos Disponíveis
git-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
#Uso Básico
- 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-clean
Primeira 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.
#📝 O que o script faz
- 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)
#🔍 Exemplo de Saída
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 ===
#⚙️ Como funciona
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
#🛡️ Segurança
- 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
#📌 Observações
- 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
#🔄 Atualizações
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 --upgrade
O comando --upgrade baixa a versão mais recente do script do GitHub e substitui a versão instalada no seu sistema.
#📂 Arquivo de Configuração
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.
#🔧 Personalização
Alterar o branch principal configurado:
-
Opção 1 - Editar o arquivo de configuração:
nano ~/.config/git-clean/settings.json
Altere o valor de
main_branchpara o desejado:{ "main_branch": "master" }
-
Opção 2 - Reconfigurar:
rm ~/.config/git-clean/settings.json git-clean
O script pedirá novamente o nome do branch principal através do prompt "Informe o nome do branch de produção:".
#📄 Licença
Este projeto é de código aberto e está disponível para uso livre.
#🤝 Contribuições
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.