From bff652165865a4caefb33ad6508ab61b873cc47b Mon Sep 17 00:00:00 2001 From: root Date: Thu, 25 Sep 2025 11:47:18 +0000 Subject: [PATCH] Update --- ca | 0 scripts/stash.sh | 158 ++++++++++++++++++++++++++--------------------- 2 files changed, 87 insertions(+), 71 deletions(-) create mode 100644 ca diff --git a/ca b/ca new file mode 100644 index 0000000..e69de29 diff --git a/scripts/stash.sh b/scripts/stash.sh index 1b36010..0235617 100755 --- a/scripts/stash.sh +++ b/scripts/stash.sh @@ -1,90 +1,106 @@ #!/bin/bash # =============================== -# Git Stash Manager Script +# Git Stash Manager mit Branch-Filter und Überschreiben # =============================== # Aktuellen Branch ermitteln -CURRENT_BRANCH=$(git branch --show-current) +CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) +echo "Aktueller Branch: $CURRENT_BRANCH" 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)" +echo "1) Neuen Stash anlegen" +echo "2) Vorhandenen Stash laden" +echo "3) Vorhandenen Stash löschen" +read -p "Auswahl: " action -read -p "Wähle eine Option (1-3): " ACTION +case $action in + 1) + # ========== Neuen Stash anlegen ========== + read -p "Gib einen Namen für den Stash ein: " USER_INPUT + STASH_NAME="$CURRENT_BRANCH - $USER_INPUT" -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 + # Prüfen, ob Stash-Name schon existiert + EXISTING=$(git stash list | grep "$STASH_NAME") + if [[ -n "$EXISTING" ]]; then + echo "Ein Stash mit dem Namen '$STASH_NAME' existiert bereits." + # Alle passenden Stashes löschen + while IFS= read -r line; do + STASH_REF=$(echo "$line" | awk -F: '{print $1}') + echo "Lösche vorhandenen Stash: $STASH_REF" + git stash drop "$STASH_REF" + done <<< "$EXISTING" + fi - STASH_NAME="${CURRENT_BRANCH} - ${CUSTOM_NAME}" - git stash push -u -m "$STASH_NAME" - echo "Änderungen erfolgreich gestasht unter dem Namen: '$STASH_NAME'" - git stash list | grep "On $CURRENT_BRANCH" - ;; - 2) - # Stash anwenden - echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':" - BRANCH_STASHES=($(git stash list | grep "On $CURRENT_BRANCH")) + # Neuen Stash anlegen (inkl. untracked Dateien) + git stash push -u -m "$STASH_NAME" + echo "Stash '$STASH_NAME' wurde angelegt." + ;; - if [[ ${#BRANCH_STASHES[@]} -eq 0 ]]; then - echo "Keine Stashes für diesen Branch vorhanden." - exit 0 - fi + 2) + # ========== Stash anwenden ========== + echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':" + STASHES=$(git stash list | grep "$CURRENT_BRANCH") - i=1 - declare -A STASH_MAP - while read -r line; do - STASH_ID=$(echo "$line" | cut -d: -f1) - STASH_MSG=$(echo "$line" | cut -d: -f3- | sed 's/^ //') - echo "$i) $STASH_ID -> $STASH_MSG" - STASH_MAP[$i]=$STASH_ID - ((i++)) - done < <(git stash list | grep "On $CURRENT_BRANCH") + if [[ -z "$STASHES" ]]; then + echo "Keine Stashes für diesen Branch vorhanden." + exit 0 + fi - 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 + i=1 + declare -A STASH_MAP + while IFS= read -r line; do + STASH_REF=$(echo "$line" | awk -F: '{print $1}') + STASH_MSG=$(echo "$line" | cut -d':' -f3- | sed 's/^ //') + echo "$i) $STASH_REF -> $STASH_MSG" + STASH_MAP[$i]=$STASH_REF + ((i++)) + done <<< "$STASHES" - git stash apply ${STASH_MAP[$STASH_CHOICE]} - echo "Stash ${STASH_MAP[$STASH_CHOICE]} angewendet." - ;; - 3) - # Stash löschen - echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':" - i=1 - declare -A STASH_MAP - while read -r line; do - STASH_ID=$(echo "$line" | cut -d: -f1) - STASH_MSG=$(echo "$line" | cut -d: -f3- | sed 's/^ //') - echo "$i) $STASH_ID -> $STASH_MSG" - STASH_MAP[$i]=$STASH_ID - ((i++)) - done < <(git stash list | grep "On $CURRENT_BRANCH") + read -p "Wähle einen Stash (Nummer): " choice + if [[ -z "${STASH_MAP[$choice]}" ]]; then + echo "Ungültige Auswahl!" + exit 1 + fi - if [[ $i -eq 1 ]]; then - echo "Keine Stashes für diesen Branch vorhanden." - exit 0 - fi + SELECTED_STASH=${STASH_MAP[$choice]} + echo "Wende Stash an: $SELECTED_STASH" + git stash apply "$SELECTED_STASH" + ;; - 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 + 3) + # ========== Stash löschen ========== + echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':" + STASHES=$(git stash list | grep "$CURRENT_BRANCH") - git stash drop ${STASH_MAP[$STASH_CHOICE]} - echo "Stash ${STASH_MAP[$STASH_CHOICE]} gelöscht." - ;; - *) - echo "Ungültige Option!" - exit 1 - ;; + if [[ -z "$STASHES" ]]; then + echo "Keine Stashes für diesen Branch vorhanden." + exit 0 + fi + + i=1 + declare -A STASH_MAP + while IFS= read -r line; do + STASH_REF=$(echo "$line" | awk -F: '{print $1}') + STASH_MSG=$(echo "$line" | cut -d':' -f3- | sed 's/^ //') + echo "$i) $STASH_REF -> $STASH_MSG" + STASH_MAP[$i]=$STASH_REF + ((i++)) + done <<< "$STASHES" + + read -p "Wähle einen Stash zum Löschen (Nummer): " choice + if [[ -z "${STASH_MAP[$choice]}" ]]; then + echo "Ungültige Auswahl!" + exit 1 + fi + + SELECTED_STASH=${STASH_MAP[$choice]} + echo "Lösche Stash: $SELECTED_STASH" + git stash drop "$SELECTED_STASH" + ;; + + *) + echo "Ungültige Auswahl!" + exit 1 + ;; esac