Portret zdziwionej dziewczyny zakładającej pudełko na głowę.

Git – 7 trików, które mogą cię zaskoczyć

5 min. czytania

Git to potężne narzędzie kontroli wersji, które zapisuje historię zmian w projekcie, ułatwiając współpracę i odzyskiwanie stabilnych stanów. Dla początkujących opanowanie kilku sprytnych komend i workflowów usuwa typowe blokery i oszczędza godziny pracy.

W tym artykule poznasz 7 zaskakujących trików Git, wykraczających poza podstawy (git init, git add, git commit) – każdy z nich opisujemy krótko, jasno i z przykładami do skopiowania w terminal:

  • chaotyczne commity – utrudniają debugowanie i cofanie zmian;
  • przypadkowe resety – potęgują stres i ryzyko „utraty” pracy;
  • brak stash – miesza niedokończone funkcje z hotfixami;
  • praca na jednej gałęzi – spowalnia testowanie równoległe.

Trik 1: git reflog – odzyskaj „utracone” commity jak magik

Gdy przypadkowo usuniesz gałąź lub wykonasz git reset --hard, standardowy git log nie pokaże wszystkiego. git reflog rejestruje wszystkie ruchy referencji (np. HEAD), dzięki czemu możesz znaleźć punkt w czasie i do niego wrócić. Domyślnie reflog przechowuje zdarzenia przez 90 dni.

Aby podejrzeć i odzyskać właściwy commit, użyj:

git reflog
# Przykładowy wynik:
# abc1234 HEAD@{0}: reset: moving to HEAD~1
# def5678 HEAD@{1}: commit: Naprawiłem buga

# Powrót do commitu (HEAD w trybie detached):
git checkout abc1234
# lub przeniesienie zmian na bieżącą gałąź:
git cherry-pick abc1234

Wskazówka – po ryzykownych operacjach (np. rebase) najpierw sprawdź git reflog, zanim uznasz, że coś „zniknęło”.

Trik 2: git stash push -m „Wiadomość” – zaparkuj zmiany z opisem

Gdy musisz szybko zmienić kontekst, ale nie chcesz commitować niedokończonego kodu, użyj git stash z opisem. Opis w stashu porządkuje kontekst i przyspiesza powrót do pracy.

Przykładowe polecenia do zaparkowania i przywrócenia zmian:

git stash push -m "Naprawiam UI przed scaleniem"
git stash list
git stash pop stash@{0} # przywraca wskazany stash i usuwa go z listy

Praktycznie – w małych projektach (np. kalkulator, gra tekstowa) stash pozwala szybko testować pomysły bez zaśmiecania historii commitów.

Trik 3: git rebase -i HEAD~3 – edytuj historię commitów interaktywnie

Interaktywny rebase umożliwia łączenie commitów (squash), zmianę opisów, a nawet usuwanie zbędnych wpisów. Efekt: czytelna, tematyczna historia przed wysłaniem na zdalne repo.

Rozpocznij interaktywną edycję ostatnich trzech commitów:

git rebase -i HEAD~3
# Otworzy się edytor:
# - zmień 'pick' na 'squash' aby scalić,
# - użyj 'edit' by poprawić commit,
# - zapisz i wyjdź, a następnie wykonaj instrukcje Gita.

Uwaga – nie przepisywaj historii na współdzielonych gałęziach (publicznych commitach). Rebasing wykonuj lokalnie przed pushem.

Trik 4: git bisect – automatycznie znajdź commit, który zepsuł kod

Gdy kod jeszcze wczoraj działał, a dziś już nie, git bisect wskaże winnego metodą wyszukiwania binarnego. To jeden z najszybszych sposobów na lokalizację regresji.

Uruchom proces i oznacz wersje jako dobre/złe:

git bisect start
git bisect bad # aktualny stan jest zły
git bisect good v1.0 # ta wersja działała
# Git przełączy do punktu środkowego – przetestuj, potem wpisuj 'git bisect good' lub 'git bisect bad'
git bisect reset # zakończenie bisecta

Trik 5: git worktree – pracuj na wielu gałęziach bez klonowania

git worktree add tworzy dodatkowy katalog roboczy dla innej gałęzi, korzystając z tego samego repozytorium. Oszczędzasz miejsce i zyskujesz równoległość prac.

Przykład dodania osobnego katalogu dla gałęzi funkcjonalnej:

git worktree add ../feature-login feature/login
# Pracuj teraz w ../feature-login niezależnie od katalogu głównego

Trik 6: git add -p – zatwierdzaj zmiany fragmentami

Zamiast dodawać cały plik (git add .), użyj opcji -p, aby wybierać konkretne fragmenty (hunki). Twoje commity stają się precyzyjne i tematyczne.

Uruchom selektywne dodawanie i odpowiadaj na pytania Gita:

git add -p path/to/file.js
# Dla każdego hunka wybierz: y (tak) / n (nie) / s (podział) / e (edycja)

Trik 7: git log –graph –oneline –all – wizualna historia gałęzi

Standardowy git log jest liniowy. Dodaj opcje --graph --oneline --all, aby zobaczyć drzewo rozgałęzień i mergy w formie ASCII. Szybciej wychwycisz kontekst zmian.

Wywołaj czytelny, skrócony podgląd historii całego repo:

git log --graph --oneline --all

Jak wdrożyć te triki w praktyce?

Zacznij na małym repo (np. prosta aplikacja lub gra). Dodawaj triki stopniowo: najpierw stash i add -p, potem rebase -i i bisect. Git rejestruje wszystko, więc śmiało eksperymentuj i w razie potrzeby wracaj do stabilnych punktów.

Dla szybkiego porównania korzyści i zastosowań skorzystaj z poniższej tabeli:

Trik Główna zaleta Kiedy używać
reflog odzyskiwanie utraconych commitów po resetach, usunięciu gałęzi, błędnych merge’ach
stash -m bezpieczne parkowanie zmian z opisem gdy szybko zmieniasz zadanie lub gałąź
rebase -i czysta, logiczna historia przed pushem, porządkowanie commitów
bisect błyskawiczne namierzenie regresji po pojawieniu się błędu w nieznanym miejscu
worktree równoległa praca bez dodatkowego klonu testy równoległe, hotfix + funkcja
add -p precyzyjne, tematyczne commity duże pliki, jednoczesne refaktory i poprawki
log –graph szybka wizualizacja historii analiza rozgałęzień i mergów