Skip to content

Instantly share code, notes, and snippets.

@murilogteixeira
Forked from goncalossilva/.gitconfig
Last active April 12, 2021 20:02
Show Gist options
  • Save murilogteixeira/731702cbfc9e1011749a6c6226df8395 to your computer and use it in GitHub Desktop.
Save murilogteixeira/731702cbfc9e1011749a6c6226df8395 to your computer and use it in GitHub Desktop.
Auto remove branches excluídas ou mescladas locais e remotas | Autoremove deleted and merged branches, locally and remotely.
#!/bin/zsh
whitelist="master|main|dev|develop"
git fetch --prune
if [ -z "$1" ]; then
list=$(git branch --merged | egrep -v "(^\*|$whitelist)") &&
cmd='echo "$list" | xargs -n 1 git branch -d'
else
list=$(git branch -r --merged | grep "$1" | egrep -v "(>|$whitelist)") &&
cmd='echo "$list" | cut -d'/' -f2- | xargs -n 1 git push "$1" --delete'
fi
echo "On branch $(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'). "; echo ""
if [ -z "$list" ]; then
echo "No branches to remove."
else
echo "Branches to remove:"; echo "$list"; echo ""
read -p 'Press enter to continue'; echo " "
eval $cmd
fi

Git autoremove

Git alias to remove deleted and merged branches. It works locally, with any specific remote or both.

Add the alias in the .gitconfig file as specified below:

[alias]
	autoremove = "!sh git-autoremove.sh"
	autoremoveall = "!git remote | xargs -n 1 git autoremove; git autoremove"

Create the .git_autoremove.sh file in the home folder (~ /) and add the contents of the file contained in this gist.

Add this to your path:

export PATH=$HOME/.git_autoremove.sh:$PATH

Usage

First of all, make sure to edit the whitelist to match your own protected branches. Afterwards, go forth and clean up.

To delete local branches that have been deleted or merged:

git autoremove

To delete branches from a specific remote that have been deleted or merged:

git autoremove origin # or any other remote

Most often than not, you'll want to delete all deleted / merged branches, regardless if local or belonging to any remote:

git autoremoveall

Git autoremove

Git alias para remover branchs mesclados ou excluídos. Funciona localmente, com qualquer branch especificada ou ambos.

Adicione os alias no arquivo .gitconfig conforme especificado abaixo:

[alias]
	autoremove = "!sh git-autoremove.sh"
	autoremoveall = "!git remote | xargs -n 1 git autoremove; git autoremove"

Crie o arquivo .git_autoremove.sh na pasta home (~/) e adicione o conteúdo do arquivo contido neste gist.

Adicione o caminho para esse arquivo ao seu path:

export PATH=$HOME/.git_autoremove.sh:$PATH

Uso

Em primeiro lugar, certifique-se de editar a whitelist para corresponder aos seus próprios branches protegidos. Depois, vá em frente e limpe.

Para excluir branches locais que foram excluídos ou mesclados:

git autoremove

Para excluir branches de um branch remoto específico que foi excluído ou mesclado:

git autoremove origin # ou qualquer outro branch remoto

Na maioria das vezes, você desejará excluir todos os branchs excluídos / mesclados, independentemente de serem locais ou pertencentes a qualquer controle remoto:

git autoremoveall
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment