This commit is contained in:
2025-08-17 14:12:51 +00:00
parent b6f26c1143
commit 6a6f6c6005
+44 -28
View File
@@ -1,36 +1,52 @@
#!/bin/bash #!/bin/bash
# Skript: Branch auswählen und wechseln
# Alle Branches abrufen (lokal + remote) # Alle lokalen Branches holen, führende Sternchen und Leerzeichen entfernen
git fetch --all --prune LOCAL_BRANCHES=$(git branch | sed 's/* //' | sed 's/^[[:space:]]*//')
# Lokale Branches # Alle Remote-Branches holen, 'origin/' entfernen, HEAD ignorieren, führende Leerzeichen entfernen
LOCAL_BRANCHES=$(git branch | sed 's/* //') REMOTE_BRANCHES=$(git branch -r | grep -v 'HEAD' | sed 's|origin/||' | sed 's/^[[:space:]]*//')
# Remote Branches (ohne origin/HEAD)
REMOTE_BRANCHES=$(git branch -r | grep -v 'HEAD' | sed 's|origin/||')
# Alle Branches zusammenführen und Duplikate entfernen # Beide Listen zusammenführen und Duplikate entfernen
ALL_BRANCHES=$(echo -e "$LOCAL_BRANCHES\n$REMOTE_BRANCHES" | sort -u) ALL_BRANCHES=$(echo -e "$LOCAL_BRANCHES\n$REMOTE_BRANCHES" | sort -u)
# Array erstellen # Master und dev extrahieren, restliche feature-Branches alphabetisch
BRANCH_ARRAY=($ALL_BRANCHES) MASTER_BRANCH=$(echo "$ALL_BRANCHES" | grep -x 'master')
DEV_BRANCH=$(echo "$ALL_BRANCHES" | grep -x 'dev')
FEATURE_BRANCHES=$(echo "$ALL_BRANCHES" | grep '^feature/' | sort)
echo "Verfügbare Branches:" # Zusammenführen
PS3="Bitte wähle einen Branch zum Wechseln: " SORTED_BRANCHES=()
[[ -n "$MASTER_BRANCH" ]] && SORTED_BRANCHES+=("$MASTER_BRANCH")
# Auswahlmenü [[ -n "$DEV_BRANCH" ]] && SORTED_BRANCHES+=("$DEV_BRANCH")
select CHOSEN_BRANCH in "${BRANCH_ARRAY[@]}"; do for branch in $FEATURE_BRANCHES; do
if [[ -n "$CHOSEN_BRANCH" ]]; then SORTED_BRANCHES+=("$branch")
echo "Wechsle zu Branch: $CHOSEN_BRANCH"
# Prüfen, ob lokaler Branch existiert
if git show-ref --verify --quiet refs/heads/$CHOSEN_BRANCH; then
git checkout $CHOSEN_BRANCH
else
# Remote-Branch auschecken
git checkout -b $CHOSEN_BRANCH origin/$CHOSEN_BRANCH
fi
break
else
echo "Ungültige Auswahl. Bitte erneut versuchen."
fi
done done
# Branches nummerieren
echo "Verfügbare Branches:"
i=1
declare -A BRANCH_MAP
for branch in "${SORTED_BRANCHES[@]}"; do
echo "$i) $branch"
BRANCH_MAP[$i]=$branch
((i++))
done
# Auswahl abfragen
read -p "Wähle einen Branch (Nummer): " choice
# Validierung
if [[ -z "${BRANCH_MAP[$choice]}" ]]; then
echo "Ungültige Auswahl!"
exit 1
fi
SELECTED_BRANCH=${BRANCH_MAP[$choice]}
echo "Wechsle zu Branch: $SELECTED_BRANCH"
# Wechseln, ggf. Branch erstellen, wenn nur Remote existiert
if git show-ref --verify --quiet refs/heads/$SELECTED_BRANCH; then
git checkout $SELECTED_BRANCH
else
git checkout -b $SELECTED_BRANCH origin/$SELECTED_BRANCH
fi