Git i kontrola wersji
Narzędzia

Git i kontrola wersji: Wprowadzenie dla programistów

Każdy programista prędzej czy później staje przed problemem zarządzania zmianami w kodzie. Edytujesz plik, coś przestaje działać i nagle nie pamiętasz, co dokładnie zmieniłeś. Właśnie dlatego powstały systemy kontroli wersji — a Git jest zdecydowanie najpopularniejszym z nich. W tym artykule poznasz podstawy Gita i dowiesz się, dlaczego jest niezbędnym narzędziem w codziennej pracy programisty.

Czym jest kontrola wersji

Kontrola wersji to system, który śledzi wszystkie zmiany wprowadzane w plikach projektu. Możesz wyobrazić sobie to jako maszynę czasu dla kodu — w każdym momencie możesz cofnąć się do dowolnego punktu w historii projektu, sprawdzić kto i kiedy wprowadził konkretną zmianę, albo porównać dwie wersje tego samego pliku.

Bez systemu kontroli wersji programiści często uciekali się do ręcznego kopiowania folderów (projekt_v1, projekt_v2_final, projekt_v2_final_NAPRAWDE). Git rozwiązuje ten problem elegancko — przechowuje pełną historię zmian w ukrytym katalogu .git wewnątrz projektu.

Pierwsze kroki: git init i konfiguracja

Żeby zacząć korzystać z Gita, musisz najpierw zainicjalizować repozytorium w katalogu swojego projektu. To tworzy strukturę wewnętrzną, w której Git będzie przechowywał historię zmian.

terminal
# Inicjalizacja nowego repozytorium
$ cd moj-projekt
$ git init
Initialized empty Git repository in /home/user/moj-projekt/.git/

# Konfiguracja nazwy użytkownika
$ git config user.name "Jan Kowalski"
$ git config user.email "jan@example.com"

Po inicjalizacji Git zaczyna obserwować katalog, ale jeszcze nie śledzi żadnych plików. Musisz mu jawnie powiedzieć, które pliki mają być wersjonowane.

Dodawanie i zatwierdzanie zmian

Praca z Gitem opiera się na dwóch kluczowych poleceniach: git add i git commit. Pierwsze przenosi zmiany do tzw. staging area (poczekalni), a drugie zapisuje je jako trwały punkt w historii projektu.

terminal
# Dodaj konkretny plik do poczekalni
$ git add index.html

# Dodaj wszystkie zmienione pliki
$ git add .

# Zatwierdź zmiany z opisem
$ git commit -m "Dodano stronę główną"
[main 3a1f2b4] Dodano stronę główną
 1 file changed, 42 insertions(+)

Każdy commit to migawka stanu projektu. Warto tworzyć commity często i z sensownymi opisami — przyszły Ty (albo kolega z zespołu) będzie Ci za to wdzięczny podczas przeglądania historii zmian.

Gałęzie i scalanie

Jedną z najpotężniejszych funkcji Gita są gałęzie (branches). Gałąź to niezależna linia rozwoju projektu. Pozwala pracować nad nową funkcjonalnością bez ryzyka zepsucia działającego kodu na głównej gałęzi.

terminal
# Utwórz nową gałąź i przejdź na nią
$ git checkout -b nowa-funkcja
Switched to a new branch 'nowa-funkcja'

# ... pracujesz, robisz commity ...

# Wróć na główną gałąź i scal zmiany
$ git checkout main
$ git merge nowa-funkcja
Merge made by the 'ort' strategy.

W praktyce programiści tworzą osobne gałęzie dla każdej nowej funkcji, poprawki błędu czy eksperymentu. Kiedy praca jest gotowa i przetestowana, gałąź scala się z powrotem do main. Czasem podczas scalania mogą pojawić się konflikty — Git poprosi Cię o ręczne rozstrzygnięcie, która wersja kodu jest prawidłowa.

Zdalne repozytoria: push i pull

Git świetnie działa lokalnie, ale prawdziwą siłę pokazuje w połączeniu ze zdalnym repozytorium (np. na GitHubie, GitLabie czy Bitbuckecie). Zdalne repozytorium to kopia projektu przechowywana na serwerze, która umożliwia współpracę z innymi programistami i stanowi kopię zapasową kodu.

terminal
# Połącz lokalne repozytorium ze zdalnym
$ git remote add origin https://github.com/user/moj-projekt.git

# Wyślij zmiany na serwer
$ git push -u origin main

# Pobierz najnowsze zmiany od zespołu
$ git pull origin main

Polecenie git push wysyła Twoje lokalne commity do zdalnego repozytorium, a git pull pobiera zmiany wprowadzone przez innych członków zespołu. To podstawowy mechanizm współpracy — każdy programista pracuje na swojej lokalnej kopii, a zmiany synchronizuje przez zdalne repozytorium.

Podsumowanie

Git to jedno z tych narzędzi, bez którego trudno sobie wyobrazić współczesne programowanie. Nawet jeśli pracujesz samodzielnie, historia zmian, możliwość cofania się i eksperymentowania na gałęziach to ogromna wygoda. A jeśli dołączysz do zespołu, znajomość Gita jest po prostu obowiązkowa.

Na początek wystarczy opanować kilka podstawowych poleceń: init, add, commit, branch, merge, push i pull. Z czasem odkryjesz bardziej zaawansowane funkcje, takie jak rebase, stash czy cherry-pick — ale to już temat na kolejny artykuł.