diff --git a/git-start.sh b/git-start.sh index 397cf3d..c4fd437 100755 --- a/git-start.sh +++ b/git-start.sh @@ -2,23 +2,17 @@ echo "===== TWORZENIE NOWEJ GAŁĘZI =====" -# Aktualizacja main -echo "Pobieram najnowszy main..." -git checkout main 2>/dev/null || { echo "❌ Nie udało się przełączyć na main"; exit 1; } -git pull origin main - -if [ $? -ne 0 ]; then - echo "❌ Błąd podczas git pull. Sprawdź internet / uprawnienia." - exit 1 -fi +# ──────────────────────────────────────────────── +# Najpierw zbieramy wszystkie odpowiedzi od użytkownika +# ──────────────────────────────────────────────── echo "" echo "Jakiego typu zmiana?" -echo " 1 = fix (poprawka błędu)" -echo " 2 = feat (nowa funkcjonalność)" -echo " 3 = refactor (poprawa kodu bez zmiany zachowania)" -echo " 4 = docs (dokumentacja)" -echo " 5 = inne (wpisz własną prefiksa)" +echo " 1 = fix (poprawka błędu)" +echo " 2 = feat (nowa funkcjonalność)" +echo " 3 = refactor (poprawa kodu bez zmiany zachowania)" +echo " 4 = docs (dokumentacja)" +echo " 5 = inne (wpisz własną prefiksa)" echo -n "Wybierz numer (Enter = fix): " read -r choice @@ -28,7 +22,8 @@ case "$choice" in 2) PREFIX="feat" ;; 3) PREFIX="refactor" ;; 4) PREFIX="docs" ;; - 5) echo -n "Wpisz własny prefix (np. chore, test, style): "; read -r PREFIX ;; + 5) echo -n "Wpisz własny prefix (np. chore, test, style): " + read -r PREFIX ;; *) PREFIX="$choice" ;; esac @@ -40,13 +35,13 @@ if [ -z "$DESC" ]; then exit 1 fi -# Czyszczenie opisu: małe litery, spacje → -, usuń zabronione znaki +# Czyszczenie opisu DESC=$(echo "$DESC" | tr '[:upper:]' '[:lower:]' | tr -s ' ' '-' | tr -cd '[:alnum:]-') -BRANCH="${PREFIX}-${DESC}" +PROPOSED_BRANCH="${PREFIX}-${DESC}" echo "" -echo "Proponowana nazwa gałęzi: $BRANCH" +echo "Proponowana nazwa gałęzi: ${PROPOSED_BRANCH}" echo -n "Zatwierdzasz? [T/n]: " read -r confirm @@ -57,14 +52,48 @@ if [[ "$confirm" =~ ^[Nn]$ ]]; then echo "❌ Anulowano." exit 1 fi +else + BRANCH="${PROPOSED_BRANCH}" fi -echo "Tworzę gałąź: $BRANCH" +# ──────────────────────────────────────────────── +# Teraz dopiero zaczynamy operacje git +# ──────────────────────────────────────────────── + +echo "" +echo "Przygotowuję main..." + +# Zapisujemy ewentualne niezacommitowane zmiany +echo "→ Zapisuję bieżące niezacommitowane zmiany (stash)..." +git stash push -m "automatyczny stash przed git-start $(date '+%Y-%m-%d %H:%M')" || true + +# Przełączamy się na main +git checkout main 2>/dev/null || { echo "❌ Nie udało się przełączyć na main"; exit 1; } + +# Aktualizujemy main +echo "→ Pobieram najnowszy main..." +git pull origin main + +if [ $? -ne 0 ]; then + echo "❌ Błąd podczas git pull. Sprawdź połączenie / uprawnienia." + # Przywracamy stash jeśli był + git stash pop || true + exit 1 +fi + +# Przywracamy ewentualne zmiany użytkownika na czystym mainie +echo "→ Przywracam Twoje zmiany (jeśli były schowane)..." +git stash pop || echo "Nie było schowanych zmian – OK" + +# Tworzymy nową gałąź +echo "→ Tworzę gałąź: $BRANCH" git checkout -b "$BRANCH" if [ $? -ne 0 ]; then - echo "❌ Błąd – gałąź prawdopodobnie już istnieje." + echo "❌ Błąd – gałąź $BRANCH prawdopodobnie już istnieje." git branch + # Przywracamy stan sprzed próby (opcjonalnie) + git checkout main exit 1 fi diff --git a/git-sync.sh b/git-sync.sh index 454ebe8..1014eb9 100755 --- a/git-sync.sh +++ b/git-sync.sh @@ -1,52 +1,14 @@ #!/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..." +echo "Synchronizuję main..." git checkout main -git pull --ff-only origin main # --ff-only = nie pozwala na merge jeśli nie jest fast-forward +git pull origin main -# 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) +# opcjonalnie: usuń stare, już zmergowane gałęzie lokalne git fetch --prune git branch --merged main | grep -v '^ *main$' | xargs git branch -d 2>/dev/null || true +<<<<<<< Updated upstream echo "" echo "======================================" echo "✅ Zrobione:" @@ -55,4 +17,7 @@ echo "• $CURRENT zmergowany do main" echo "• main wypushowany na serwer" echo "Jesteś teraz na: $CURRENT" echo "======================================" -git checkout main \ No newline at end of file +git checkout main +======= +echo "Gotowe. Teraz możesz tworzyć nową gałąź." +>>>>>>> Stashed changes