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.
# 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.
# 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.
# 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.
# 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ł.