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
+60 -44
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
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)"
# ========== Neuen Stash anlegen ==========
read -p "Gib einen Namen für den Stash ein: " USER_INPUT
STASH_NAME="$CURRENT_BRANCH - $USER_INPUT"
# 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}"
# Neuen Stash anlegen (inkl. untracked Dateien)
git stash push -u -m "$STASH_NAME"
echo "Änderungen erfolgreich gestasht unter dem Namen: '$STASH_NAME'"
git stash list | grep "On $CURRENT_BRANCH"
echo "Stash '$STASH_NAME' wurde angelegt."
;;
2)
# Stash anwenden
# ========== Stash anwenden ==========
echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':"
BRANCH_STASHES=($(git stash list | grep "On $CURRENT_BRANCH"))
STASHES=$(git stash list | grep "$CURRENT_BRANCH")
if [[ ${#BRANCH_STASHES[@]} -eq 0 ]]; then
if [[ -z "$STASHES" ]]; then
echo "Keine Stashes für diesen Branch vorhanden."
exit 0
fi
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
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 < <(git stash list | grep "On $CURRENT_BRANCH")
done <<< "$STASHES"
read -p "Gib die Nummer des Stashs ein, den du anwenden möchtest: " STASH_CHOICE
if [[ -z "${STASH_MAP[$STASH_CHOICE]}" ]]; then
read -p "Wähle einen Stash (Nummer): " choice
if [[ -z "${STASH_MAP[$choice]}" ]]; then
echo "Ungültige Auswahl!"
exit 1
fi
git stash apply ${STASH_MAP[$STASH_CHOICE]}
echo "Stash ${STASH_MAP[$STASH_CHOICE]} angewendet."
SELECTED_STASH=${STASH_MAP[$choice]}
echo "Wende Stash an: $SELECTED_STASH"
git stash apply "$SELECTED_STASH"
;;
3)
# Stash löschen
# ========== 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")
STASHES=$(git stash list | grep "$CURRENT_BRANCH")
if [[ $i -eq 1 ]]; then
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 löschen möchtest: " STASH_CHOICE
if [[ -z "${STASH_MAP[$STASH_CHOICE]}" ]]; then
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
git stash drop ${STASH_MAP[$STASH_CHOICE]}
echo "Stash ${STASH_MAP[$STASH_CHOICE]} gelöscht."
SELECTED_STASH=${STASH_MAP[$choice]}
echo "Lösche Stash: $SELECTED_STASH"
git stash drop "$SELECTED_STASH"
;;
*)
echo "Ungültige Option!"
echo "Ungültige Auswahl!"
exit 1
;;
esac