Git, GitHub & DevOps/01intro11 min

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

ObiektCzym jest
BlobZawartość pojedynczego pliku
TreeKatalog — lista blobów i poddrzew
CommitMigawka drzewa + autor + wskaźnik na rodzica
Ref / branchRuchomy 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: --amend zmienia 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.