diff --git a/src/eliminar-ramas-mergeadas.sh b/src/eliminar-ramas-mergeadas.sh new file mode 100644 index 0000000..6846aec --- /dev/null +++ b/src/eliminar-ramas-mergeadas.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +# Sincronizo local con el remoto +echo -e "\e[32mPrimero vamos a sincronizar el repo local con el remoto\e[0m" +git pull origin HEAD $@ +git fetch origin +git fetch --prune + + +# Filtrar ramas +branches=($(git branch -a --merged | egrep -v "(^\*|main|master|default|trunk|pro|prod|production|release)")) + +# Verificar si hay ramas para eliminar +if [ ${#branches[@]} -eq 0 ]; then + echo -e "\e[32mNo hay ramas para eliminar.\e[0m" + exit 0 +fi + +# Mostrar las ramas a eliminar +echo -e "\e[33mOJO! Las siguientes ramas serán eliminadas:\e[0m" +for branch in "${branches[@]}" +do + echo "- $branch" +done + + +# Solicitar confirmación +read -p "¿Estás seguro de que deseas eliminar estas ramas? (s/n): " confirm +if [[ $confirm == "s" ]]; then + + # Eliminar las ramas filtradas + for branch in "${branches[@]}" + do + + branch_name=${branch#remotes/origin/} # Eliminar "remotes/origin/" del nombre de la rama + + # Verificar si la rama remota existe + if git rev-parse --quiet --verify "refs/remotes/origin/$branch_name" >/dev/null; then + + echo -e "\e[34mSe procede a eliminar la rama: $branch_name\e[0m" + + git push origin --delete "$branch_name" + + else + + echo -e "\e[31mLa rama $branch_name no existe en el repositorio remoto. Saltando eliminación.\e[0m" + + fi + + done + +elif [[ $confirm == "n" ]]; then + echo "Operación cancelada." + +else + echo "Opción no válida. Operación cancelada." + +fi + +#######