Git jest dziś standardem praktycznie w każdym projekcie programistycznym.
Niezależnie od tego, czy aplikacja jest tworzona przez jedną osobę czy przez duży zespół, Git pozwala kontrolować zmiany w kodzie i bezpiecznie rozwijać projekt.
Największą zaletą Gita jest możliwość:
śledzenia historii zmian,
pracy na wielu branchach,
współpracy kilku developerów jednocześnie,
cofania błędów,
prowadzenia code review.
Inicjalizacja repozytorium
Utworzenie repozytorium Git
git initTworzy nowe repozytorium Git w aktualnym katalogu projektu.
Pobieranie projektu
Klonowanie repozytorium
git clone https://adres-repozytorium.gitPobiera projekt z serwera na komputer lokalny.
Sprawdzanie zmian
Status repozytorium
git statusPokazuje:
zmodyfikowane pliki,
nowe pliki,
pliki oczekujące na commit,
aktualny branch.
Historia commitów
git logWyświetla historię commitów projektu.
Bardziej skrócona wersja:
git log --onelineDodawanie zmian
Dodanie wszystkich plików
git add .Dodaje wszystkie zmodyfikowane pliki do staging area.
Dodanie pojedynczego pliku
git add index.phpCommity
Utworzenie commita
git commit -m "Dodano logowanie użytkownika"Commit zapisuje aktualny stan zmian wraz z opisem.
Poprawienie ostatniego commita
git commit --amendPozwala zmienić opis lub dodać brakujące pliki do ostatniego commita.
Branche
Branch pozwala pracować nad funkcjonalnością niezależnie od głównej wersji projektu.
Lista branchy
git branchUtworzenie nowego brancha
git branch feature/loginPrzełączenie brancha
git checkout feature/loginUtworzenie i przełączenie brancha jednocześnie
git checkout -b feature/loginUsunięcie brancha
git branch -d feature/loginSynchronizacja z repozytorium
Pobranie zmian
git pullPobiera i scala najnowsze zmiany z repozytorium.
Wysłanie zmian
git pushPublikuje commity na serwerze.
Pierwszy push brancha
git push -u origin feature/loginTworzy branch na zdalnym repozytorium i ustawia tracking.
Merge i łączenie branchy
Połączenie branchy
git merge feature/loginŁączy branch
feature/login z aktualnym branchem.Najczęściej workflow wygląda tak:
przejście na
main,merge feature brancha,
push zmian.
Przykład:
git checkout main
git merge feature/login
git pushKonflikty merge
Konflikty pojawiają się wtedy, gdy dwie osoby zmodyfikują ten sam fragment kodu.
Git oznacza konflikt w pliku:
<<<<<<< HEAD
stary kod
=======
nowy kod
>>>>>>> feature/loginPo ręcznym rozwiązaniu konfliktu należy:
git add .
git commitCofanie zmian
Cofnięcie zmian przed commitem
git checkout -- index.phpPrzywraca ostatnią wersję pliku.
Usunięcie pliku ze staging area
git reset index.phpCofnięcie ostatniego commita
git reset --soft HEAD~1Usuwa commit, ale pozostawia zmiany w plikach.
Twardy reset
git reset --hard HEAD~1Usuwa commit oraz wszystkie zmiany.
Pobieranie bez merge
Fetch
git fetchPobiera zmiany z repozytorium bez automatycznego mergowania.
Rebase
Rebase brancha
git rebase mainPrzenosi commity aktualnego brancha na najnowszą wersję
main.Rebase pomaga utrzymać czystszą historię commitów.
Stash
Przydatne, gdy trzeba chwilowo schować zmiany.
Zapisanie zmian
git stashPrzywrócenie zmian
git stash popRemote
Lista zdalnych repozytoriów
git remote -vDodanie zdalnego repozytorium
git remote add origin https://adres-repo.gitTypowy workflow pracy zespołowej
Najczęściej praca wygląda mniej więcej tak:
git pull
git checkout -b feature/new-task
# praca nad kodem
git add .
git commit -m "Dodano nową funkcjonalność"
git push -u origin feature/new-taskNastępnie tworzony jest:
Pull Request w GitHub
lub
Merge Request w GitLab.
Po code review branch jest mergowany do głównej gałęzi projektu.
GitHub vs GitLab
GitHub
Najpopularniejsza platforma do hostowania repozytoriów Git.
Najczęściej kojarzona z:
open source,
prostym workflow,
dużą społecznością developerów.
GitLab
Bardziej rozbudowane środowisko DevOps.
Popularne funkcje:
CI/CD,
pipeline’y,
deployment,
self-hosting,
integracje firmowe.
Podsumowanie
Najważniejsze elementy codziennej pracy z Gitem:
branchowanie,
commitowanie zmian,
merge,
pull/push,
rozwiązywanie konfliktów,
code review,
Pull Requesty i Merge Requesty.
Nawet podstawowa znajomość tych operacji pozwala sprawnie pracować w większości zespołów developerskich.