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 #!/bin/bash
# =============================== # ===============================
# Git Stash Manager Script # Git Stash Manager mit Branch-Filter und Überschreiben
# =============================== # ===============================
# Aktuellen Branch ermitteln # 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 "Was möchtest du tun?"
echo "1) Neuen Stash anlegen (aktueller Branch: $CURRENT_BRANCH)" echo "1) Neuen Stash anlegen"
echo "2) Vorhandenen Stash anwenden (nur aktueller Branch)" echo "2) Vorhandenen Stash laden"
echo "3) Vorhandenen Stash löschen (nur aktueller Branch)" 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 # Prüfen, ob Stash-Name schon existiert
1) EXISTING=$(git stash list | grep "$STASH_NAME")
# Neuer Stash (inkl. untracked Dateien) if [[ -n "$EXISTING" ]]; then
read -p "Gib einen eigenen Namen für den Stash ein: " CUSTOM_NAME echo "Ein Stash mit dem Namen '$STASH_NAME' existiert bereits."
if [[ -z "$CUSTOM_NAME" ]]; then # Alle passenden Stashes löschen
CUSTOM_NAME="WIP-$(date +%Y%m%d%H%M%S)" while IFS= read -r line; do
fi 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}" # Neuen Stash anlegen (inkl. untracked Dateien)
git stash push -u -m "$STASH_NAME" git stash push -u -m "$STASH_NAME"
echo "Änderungen erfolgreich gestasht unter dem Namen: '$STASH_NAME'" echo "Stash '$STASH_NAME' wurde angelegt."
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"))
if [[ ${#BRANCH_STASHES[@]} -eq 0 ]]; then 2)
echo "Keine Stashes für diesen Branch vorhanden." # ========== Stash anwenden ==========
exit 0 echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':"
fi STASHES=$(git stash list | grep "$CURRENT_BRANCH")
i=1 if [[ -z "$STASHES" ]]; then
declare -A STASH_MAP echo "Keine Stashes für diesen Branch vorhanden."
while read -r line; do exit 0
STASH_ID=$(echo "$line" | cut -d: -f1) fi
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 "Gib die Nummer des Stashs ein, den du anwenden möchtest: " STASH_CHOICE i=1
if [[ -z "${STASH_MAP[$STASH_CHOICE]}" ]]; then declare -A STASH_MAP
echo "Ungültige Auswahl!" while IFS= read -r line; do
exit 1 STASH_REF=$(echo "$line" | awk -F: '{print $1}')
fi 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]} read -p "Wähle einen Stash (Nummer): " choice
echo "Stash ${STASH_MAP[$STASH_CHOICE]} angewendet." if [[ -z "${STASH_MAP[$choice]}" ]]; then
;; echo "Ungültige Auswahl!"
3) exit 1
# Stash löschen fi
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")
if [[ $i -eq 1 ]]; then SELECTED_STASH=${STASH_MAP[$choice]}
echo "Keine Stashes für diesen Branch vorhanden." echo "Wende Stash an: $SELECTED_STASH"
exit 0 git stash apply "$SELECTED_STASH"
fi ;;
read -p "Gib die Nummer des Stashs ein, den du löschen möchtest: " STASH_CHOICE 3)
if [[ -z "${STASH_MAP[$STASH_CHOICE]}" ]]; then # ========== Stash löschen ==========
echo "Ungültige Auswahl!" echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':"
exit 1 STASHES=$(git stash list | grep "$CURRENT_BRANCH")
fi
git stash drop ${STASH_MAP[$STASH_CHOICE]} if [[ -z "$STASHES" ]]; then
echo "Stash ${STASH_MAP[$STASH_CHOICE]} gelöscht." echo "Keine Stashes für diesen Branch vorhanden."
;; exit 0
*) fi
echo "Ungültige Option!"
exit 1 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 esac