Git – podstawowe komendy, które musisz znać

Niezależnie od tego, czy jesteś początkującym programistą, czy doświadczonym developerem, znajomość podstawowych komend Git jest absolutną koniecznością. Git umożliwia śledzenie zmian w kodzie, cofanie błędów, pracę równoległą na wielu funkcjonalnościach oraz efektywną współpracę w zespole. W tym przewodniku omówimy najważniejsze polecenia, które powinieneś opanować do perfekcji.

Czym jest Git i dlaczego warto go używać?

Git to rozproszony system kontroli wersji (DVCS – Distributed Version Control System) stworzony przez Linusa Torvaldsa w 2005 roku. W odróżnieniu od centralnych systemów kontroli wersji, każdy developer posiada pełną kopię repozytorium na swoim komputerze. Dzięki temu praca jest możliwa nawet bez połączenia z internetem, a ryzyko utraty danych jest minimalne.

Git jest dziś standardem branżowym – używany jest zarówno przez małe startupy, jak i największe korporacje technologiczne na świecie. Platformy takie jak GitHub, GitLab czy Bitbucket zbudowane są właśnie wokół Gita i oferują dodatkowe funkcje ułatwiające współpracę zespołową.

Instalacja i konfiguracja

Zanim przejdziemy do komend, upewnij się, że Git jest zainstalowany na Twoim komputerze. Możesz to sprawdzić poleceniem:

git --version

Jeśli Git nie jest zainstalowany, pobierz go ze strony git-scm.com. Po instalacji skonfiguruj swoje dane, które będą widoczne przy każdym commicie:

git config --global user.name "Twoje Imię"
git config --global user.email "twoj@email.com"

Podstawowe komendy Git

1. git init – inicjalizacja repozytorium

Komenda git init tworzy nowe, puste repozytorium Git w bieżącym katalogu. Używaj jej, gdy zaczynasz nowy projekt od zera:

git init

Po wykonaniu tej komendy w katalogu pojawi się ukryty folder .git, który przechowuje całą historię projektu i konfigurację repozytorium.

2. git clone – klonowanie repozytorium

Jeśli chcesz pobrać istniejące repozytorium (np. z GitHuba), użyj komendy git clone:

git clone https://github.com/uzytkownik/nazwa-repo.git

Komenda ta tworzy lokalną kopię zdalnego repozytorium wraz z całą historią commitów. Możesz również określić nazwę katalogu docelowego:

git clone https://github.com/uzytkownik/nazwa-repo.git moj-projekt

3. git status – sprawdzenie stanu repozytorium

To jedna z najczęściej używanych komend. git status pokazuje aktualny stan repozytorium – które pliki zostały zmodyfikowane, które są gotowe do commitu (staging area), a które nie są śledzone przez Gita:

git status

Regularne sprawdzanie statusu pomaga uniknąć pomyłek i zapewnia pełną kontrolę nad tym, co zostanie zapisane w historii projektu.

4. git add – dodawanie plików do staging area

Przed wykonaniem commitu musisz wskazać Gitowi, które zmiany chcesz zapisać. Służy do tego komenda git add:

# Dodanie konkretnego pliku
git add nazwa-pliku.js

# Dodanie wszystkich zmienionych plików
git add .

# Dodanie wszystkich plików z rozszerzeniem .html
git add *.html

Staging area (obszar przejściowy) to swego rodzaju "poczekalnia" – pliki umieszczone w tym obszarze zostaną uwzględnione w następnym commicie.

5. git commit – zapisywanie zmian

Commit to zapis stanu projektu w danym momencie. Każdy commit powinien zawierać czytelny opis wprowadzonych zmian:

git commit -m "Dodanie formularza kontaktowego"

Dobrą praktyką jest pisanie krótkich, konkretnych komunikatów commitów w trybie rozkazującym (np. "Dodaj", "Napraw", "Usuń"). Możesz też połączyć git add i git commit w jedno polecenie dla śledzonych plików:

git commit -am "Naprawienie błędu w nawigacji"

6. git log – historia commitów

Komenda git log wyświetla historię commitów w bieżącym repozytorium:

# Pełna historia
git log

# Skrócona historia (jeden wiersz na commit)
git log --oneline

# Historia z graficznym przedstawieniem gałęzi
git log --oneline --graph --all

Historia commitów to świetne narzędzie do śledzenia postępów pracy i identyfikowania momentu, w którym pojawił się błąd.

7. git branch – zarządzanie gałęziami

Gałęzie (branches) to jedna z najpotężniejszych funkcji Gita. Pozwalają pracować nad różnymi funkcjonalnościami jednocześnie, bez wpływu na główny kod projektu:

# Lista wszystkich gałęzi
git branch

# Tworzenie nowej gałęzi
git branch nazwa-galezi

# Usunięcie gałęzi
git branch -d nazwa-galezi

8. git checkout / git switch – przełączanie gałęzi

Aby przełączyć się na inną gałąź, możesz użyć komendy git checkout lub nowszej git switch:

# Przełączenie na istniejącą gałąź
git checkout nazwa-galezi
git switch nazwa-galezi

# Tworzenie i przełączenie na nową gałąź
git checkout -b nowa-galaz
git switch -c nowa-galaz

Możesz też użyć git checkout do przywrócenia pliku do stanu z ostatniego commitu:

git checkout -- nazwa-pliku.js

9. git merge – scalanie gałęzi

Po zakończeniu pracy na osobnej gałęzi możesz scalić ją z gałęzią główną (zazwyczaj main lub master):

# Przejdź na gałąź, do której chcesz scalić
git checkout main

# Scal gałąź feature z main
git merge feature/nowa-funkcja

Podczas scalania mogą pojawić się konflikty, jeśli te same linie kodu zostały zmodyfikowane w obu gałęziach. Git oznacza takie miejsca w plikach, a developer musi ręcznie zdecydować, która wersja ma zostać zachowana.

10. git pull i git push – synchronizacja ze zdalnym repozytorium

Te dwie komendy są kluczowe przy pracy zespołowej:

# Pobieranie i scalanie zmian ze zdalnego repozytorium
git pull origin main

# Wysyłanie lokalnych commitów do zdalnego repozytorium
git push origin main

Dobrą praktyką jest wykonywanie git pull przed rozpoczęciem pracy i przed git push, aby uniknąć konfliktów ze zmianami wprowadzonymi przez innych członków zespołu.

11. git stash – odkładanie zmian na bok

git stash to bardzo przydatna komenda, gdy musisz szybko przełączyć się na inną gałąź, ale nie chcesz commitować niedokończonej pracy:

# Odłożenie zmian
git stash

# Lista odłożonych zmian
git stash list

# Przywrócenie ostatnio odłożonych zmian
git stash pop

# Przywrócenie konkretnego stasha
git stash apply stash@{0}

12. git reset i git revert – cofanie zmian

Czasem popełniamy błędy i musimy cofnąć zmiany. Git oferuje kilka sposobów:

# Cofnięcie do staging area (zachowuje zmiany w plikach)
git reset HEAD~1

# Cofnięcie commitów z usunięciem zmian (UWAGA: nieodwracalne!)
git reset --hard HEAD~1

# Bezpieczne cofnięcie - tworzy nowy commit "odwracający" zmiany
git revert HEAD

Pamiętaj, że git reset --hard jest operacją nieodwracalną – używaj jej ostrożnie, szczególnie na gałęziach współdzielonych z innymi.

Przydatne aliasy Git

Aby przyspieszyć pracę, możesz skonfigurować własne skróty (aliasy) dla często używanych komend:

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --graph --all"

Po skonfigurowaniu aliasów możesz używać np. git st zamiast git status.

Plik .gitignore

Plik .gitignore pozwala wskazać, które pliki i foldery Git ma ignorować (np. pliki konfiguracyjne z hasłami, foldery node_modules, pliki tymczasowe):

# Przykładowa zawartość pliku .gitignore
node_modules/
.env
*.log
dist/
.DS_Store

Plik .gitignore umieszczamy w głównym katalogu projektu. Dobrą praktyką jest tworzenie go na samym początku pracy z projektem.

Podsumowanie

Opanowanie podstawowych komend Git to fundament pracy każdego programisty. Poniżej znajdziesz skróconą ściągę z omówionych poleceń:

  • git init – inicjalizacja repozytorium
  • git clone – klonowanie zdalnego repozytorium
  • git status – sprawdzenie stanu repozytorium
  • git add – dodanie plików do staging area
  • git commit – zapisanie zmian
  • git log – wyświetlenie historii commitów
  • git branch – zarządzanie gałęziami
  • git checkout / switch – przełączanie gałęzi
  • git merge – scalanie gałęzi
  • git pull / push – synchronizacja ze zdalnym repozytorium
  • git stash – odkładanie zmian na bok
  • git reset / revert – cofanie zmian

Git to narzędzie, które najlepiej poznaje się przez praktykę. Zacznij od prostych projektów, regularnie commituj swoje zmiany i stopniowo wprowadzaj bardziej zaawansowane techniki pracy z gałęziami. Wkrótce Git stanie się naturalną częścią Twojego workflow programistycznego.