Git — model danych i podstawowe komendy
Git to nie "zapisywanie diffów"
Wbrew intuicji Git nie trzyma listy zmian. Każdy commit to migawka (snapshot) całego drzewa plików w danym momencie plus wskaźnik na rodzica. Zrozumienie tego modelu sprawia, że reszta komend przestaje być magią.
Cztery pojęcia, które tłumaczą wszystko
| Obiekt | Czym jest |
|---|---|
| Blob | Zawartość pojedynczego pliku |
| Tree | Katalog — lista blobów i poddrzew |
| Commit | Migawka drzewa + autor + wskaźnik na rodzica |
| Ref / branch | Ruchomy wskaźnik na konkretny commit |
Gałąź (main, feature/...) to tylko etykieta wskazująca commit. Dlatego
tworzenie gałęzi jest natychmiastowe — to zapis jednego SHA, nie kopia plików.
HEAD to wskaźnik na "gdzie teraz jesteś".
Trzy stany pliku
Każda zmiana wędruje przez trzy obszary:
working directory -> staging area (index) -> repozytorium
(edytujesz) (git add) (git commit)
- Working directory — Twoje pliki na dysku.
- Staging area — to, co wejdzie do następnego commita (
git add). - Repozytorium — utrwalona historia (
git commit).
Wskazówka: Staging area to nie biurokracja, tylko narzędzie. Pozwala wrzucić do commita tylko część zmian z pliku i zbudować czysty, logiczny commit zamiast wora "wszystko naraz".
Komendy na każdy dzień
# Stan repo - co zmienione, co w stagingu
git status
# Dodaj do stagingu konkretny plik lub wszystko
git add src/app/page.tsx
git add .
# Zatwierdź migawkę
git commit -m "feat: dodaj listę raportów"
# Historia commitów (zwięźle)
git log --oneline --graph --decorate
# Różnice
git diff # working vs staging
git diff --staged # staging vs ostatni commit
Praca z gałęziami i zdalnym repo
# Utwórz i przełącz się na nową gałąź
git switch -c feature/lista-raportow
# Pobierz zmiany z GitHuba
git pull
# Wypchnij gałąź na zdalne repo
git push -u origin feature/lista-raportow
Cofanie — bezpiecznie
# Wycofaj zmianę z working directory (przywróć z ostatniego commita)
git restore src/app/page.tsx
# Wyjmij plik ze stagingu (zachowaj zmiany)
git restore --staged src/app/page.tsx
# Popraw ostatni commit (np. literówkę w opisie)
git commit --amend
Wskazówka:
--amendzmienia historię — używaj go tylko na commitach, których jeszcze nie wypchnąłeś. Po pushu poprawiaj nowym commitem.
Dlaczego to wszystko jest szybkie
Bo Git operuje lokalnie na wskaźnikach i migawkach. Większość komend (log,
branch, diff, commit) nie dotyka sieci. Sieć potrzebna jest dopiero
przy push/pull/fetch.
Podsumowanie
Git = łańcuch migawek powiązanych wskaźnikami; gałąź to ruchoma etykieta.
Codziennie wystarczy: status, add, commit, log, switch, pull, push.
Ten model jest fundamentem pod branching i Pull Requesty z kolejnej lekcji.