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 #!/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
case "$ACTION" in
1) 1)
# Neuer Stash (inkl. untracked Dateien) # ========== Neuen Stash anlegen ==========
read -p "Gib einen eigenen Namen für den Stash ein: " CUSTOM_NAME read -p "Gib einen Namen für den Stash ein: " USER_INPUT
if [[ -z "$CUSTOM_NAME" ]]; then STASH_NAME="$CURRENT_BRANCH - $USER_INPUT"
CUSTOM_NAME="WIP-$(date +%Y%m%d%H%M%S)"
# 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 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) 2)
# Stash anwenden # ========== Stash anwenden ==========
echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':" 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." echo "Keine Stashes für diesen Branch vorhanden."
exit 0 exit 0
fi fi
i=1 i=1
declare -A STASH_MAP declare -A STASH_MAP
while read -r line; do while IFS= read -r line; do
STASH_ID=$(echo "$line" | cut -d: -f1) STASH_REF=$(echo "$line" | awk -F: '{print $1}')
STASH_MSG=$(echo "$line" | cut -d: -f3- | sed 's/^ //') STASH_MSG=$(echo "$line" | cut -d':' -f3- | sed 's/^ //')
echo "$i) $STASH_ID -> $STASH_MSG" echo "$i) $STASH_REF -> $STASH_MSG"
STASH_MAP[$i]=$STASH_ID STASH_MAP[$i]=$STASH_REF
((i++)) ((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 read -p "Wähle einen Stash (Nummer): " choice
if [[ -z "${STASH_MAP[$STASH_CHOICE]}" ]]; then if [[ -z "${STASH_MAP[$choice]}" ]]; then
echo "Ungültige Auswahl!" echo "Ungültige Auswahl!"
exit 1 exit 1
fi fi
git stash apply ${STASH_MAP[$STASH_CHOICE]} SELECTED_STASH=${STASH_MAP[$choice]}
echo "Stash ${STASH_MAP[$STASH_CHOICE]} angewendet." echo "Wende Stash an: $SELECTED_STASH"
git stash apply "$SELECTED_STASH"
;; ;;
3) 3)
# Stash löschen # ========== Stash löschen ==========
echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':" echo "Liste aller Stashes für Branch '$CURRENT_BRANCH':"
i=1 STASHES=$(git stash list | grep "$CURRENT_BRANCH")
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 if [[ -z "$STASHES" ]]; then
echo "Keine Stashes für diesen Branch vorhanden." echo "Keine Stashes für diesen Branch vorhanden."
exit 0 exit 0
fi fi
read -p "Gib die Nummer des Stashs ein, den du löschen möchtest: " STASH_CHOICE i=1
if [[ -z "${STASH_MAP[$STASH_CHOICE]}" ]]; then 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!" echo "Ungültige Auswahl!"
exit 1 exit 1
fi fi
git stash drop ${STASH_MAP[$STASH_CHOICE]} SELECTED_STASH=${STASH_MAP[$choice]}
echo "Stash ${STASH_MAP[$STASH_CHOICE]} gelöscht." echo "Lösche Stash: $SELECTED_STASH"
git stash drop "$SELECTED_STASH"
;; ;;
*) *)
echo "Ungültige Option!" echo "Ungültige Auswahl!"
exit 1 exit 1
;; ;;
esac esac