#!/usr/bin/env bash set -e # wychodzi przy pierwszym błędzie echo "======================================" echo " git-sync – pełna synchronizacja + merge + push" echo "======================================" CURRENT=$(git rev-parse --abbrev-ref HEAD) if [ "$CURRENT" = "main" ] || [ "$CURRENT" = "HEAD" ]; then echo "Błąd: jesteś na main lub w detached HEAD." echo "Najpierw przejdź na swoją gałąź roboczą." exit 1 fi echo "Twoja gałąź: $CURRENT" # 1. Aktualizacja origin (wszystkie branche) git fetch origin # 2. Przechodzimy na main i aktualizujemy go z serwera echo "→ Aktualizuję main z origin..." git checkout main git pull --ff-only origin main # --ff-only = nie pozwala na merge jeśli nie jest fast-forward # 3. Wracamy na gałąź roboczą git checkout "$CURRENT" # 4. Merge main → nasza gałąź (żeby nie mieć konfliktów przy mergu w drugą stronę) echo "→ Merge main → $CURRENT (aktualizacja feature z main)..." git merge main # 5. Teraz merge nasza gałąź → main echo "→ Merge $CURRENT → main lokalnie..." git checkout main git merge "$CURRENT" --no-edit # --no-edit = bez edytowania komunikatu merge # 6. Push main na serwer echo "→ Wrzucam zaktualizowany main na serwer..." git push origin main # 7. Opcjonalnie: wracamy na gałąź roboczą git checkout "$CURRENT" # 8. Czyszczenie starych zmergowanych gałęzi (opcjonalne) git fetch --prune git branch --merged main | grep -v '^ *main$' | xargs git branch -d 2>/dev/null || true echo "" echo "======================================" echo "✅ Zrobione:" echo "• main zaktualizowany z serwera" echo "• $CURRENT zmergowany do main" echo "• main wypushowany na serwer" echo "Jesteś teraz na: $CURRENT" echo "======================================"