This commit is contained in:
root
2025-09-25 11:47:18 +00:00
parent ef8920cb26
commit bff6521658
2 changed files with 87 additions and 71 deletions
View File
+87 -71
View File
@@ -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