diff --git a/scripts/stash.sh b/scripts/stash.sh new file mode 100755 index 0000000..3d2c929 --- /dev/null +++ b/scripts/stash.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# =============================== +# Git Stash Manager Script +# =============================== + +# Aktuellen Branch ermitteln +CURRENT_BRANCH=$(git branch --show-current) + +# =============================== +# Auswahl: Stash anlegen, laden oder löschen +# =============================== +echo "Was möchtest du tun?" +echo "1) Neuen Stash anlegen (aktueller Branch: $CURRENT_BRANCH)" +echo "2) Vorhandenen Stash anwenden (nur aktueller Branch)" +echo "3) Vorhandenen Stash löschen (nur aktueller Branch)" + +read -p "Wähle eine Option (1-3): " ACTION + +case "$ACTION" in + 1) + # ------------------------------- + # Neuer Stash (inkl. untracked Dateien) + # ------------------------------- + read -p "Gib einen eigenen Namen für den Stash ein: " CUSTOM_NAME + if [[ -z "$CUSTOM_NAME" ]]; then + CUSTOM_NAME="WIP-$(date +%Y%m%d%H%M%S)" + fi + + STASH_NAME="${CURRENT_BRANCH} - ${CUSTOM_NAME}" + git stash push -u -m "$STASH_NAME" + echo "Änderungen (inkl. untracked files) erfolgreich gestasht unter dem Namen: '$STASH_NAME'" + git stash list | grep "On $CURRENT_BRANCH" + ;; + 2) + # ------------------------------- + # Vorhandenen Stash anwenden + # ------------------------------- + echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':" + BRANCH_STASHES=($(git stash list | grep "On $CURRENT_BRANCH" | cut -d: -f1)) + + if [[ ${#BRANCH_STASHES[@]} -eq 0 ]]; then + echo "Keine Stashes für diesen Branch vorhanden." + exit 0 + fi + + i=1 + declare -A STASH_MAP + for s in "${BRANCH_STASHES[@]}"; do + echo "$i) $s" + STASH_MAP[$i]=$s + ((i++)) + done + + read -p "Gib die Nummer des Stashs ein, den du anwenden möchtest: " STASH_CHOICE + if [[ -z "${STASH_MAP[$STASH_CHOICE]}" ]]; then + echo "Ungültige Auswahl!" + exit 1 + fi + + git stash apply ${STASH_MAP[$STASH_CHOICE]} + echo "Stash ${STASH_MAP[$STASH_CHOICE]} angewendet." + ;; + 3) + # ------------------------------- + # Vorhandenen Stash löschen + # ------------------------------- + echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':" + BRANCH_STASHES=($(git stash list | grep "On $CURRENT_BRANCH" | cut -d: -f1)) + + if [[ ${#BRANCH_STASHES[@]} -eq 0 ]]; then + echo "Keine Stashes für diesen Branch vorhanden." + exit 0 + fi + + i=1 + declare -A STASH_MAP + for s in "${BRANCH_STASHES[@]}"; do + echo "$i) $s" + STASH_MAP[$i]=$s + ((i++)) + done + + read -p "Gib die Nummer des Stashs ein, den du löschen möchtest: " STASH_CHOICE + if [[ -z "${STASH_MAP[$STASH_CHOICE]}" ]]; then + echo "Ungültige Auswahl!" + exit 1 + fi + + git stash drop ${STASH_MAP[$STASH_CHOICE]} + echo "Stash ${STASH_MAP[$STASH_CHOICE]} gelöscht." + ;; + *) + echo "Ungültige Option!" + exit 1 + ;; +esac