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 |






