Git dla Zespołów i Zaawansowanych: Workflow i Gałęzie
Ten dokument wyjaśnia koncepcje pracy z systemem Git wykraczające poza proste zapisywanie zmian. Dowiesz się tutaj, jak pracować równolegle nad różnymi funkcjami, jak łączyć kod z innymi programistami i jak dbać o czystość projektu.
1. Konfiguracja Tożsamości (Niezbędne na start)
Zanim zaczniesz tworzyć historię projektu, Git musi wiedzieć, kim jesteś. Te dane będą widoczne przy każdym Twoim commicie.
git config --global user.name "Twoje Imie"
git config --global user.email "twoj.email@przyklad.com"
To ustawienie jest jednorazowe dla całego systemu. Bez tego Twoje zmiany będą podpisane jako nieznany użytkownik, co utrudnia współpracę.
2. Praca na Gałęziach (Branches)
Gałęzie to jedna z najpotężniejszych funkcji Gita. Wyobraź sobie je jako równoległe linie czasowe projektu.
- Main/Master: To główna, stabilna wersja kodu (produkcyjna).
- Feature Branch: To kopia kodu, na której pracujesz nad nową funkcją. Możesz tu psuć i eksperymentować bez ryzyka uszkodzenia głównego projektu.
Dlaczego używamy gałęzi?
Dzięki nim wiele osób może pracować nad różnymi plikami w tym samym czasie, nie wchodząc sobie w drogę.
Zarządzanie Gałęziami
Tworzenie nowej gałęzi i przełączenie się na nią: Najczęściej używana komenda. Tworzy nową linię czasu od miejsca, w którym aktualnie jesteś.
git checkout -b nazwa-twojej-galenzi
# Lub w nowszych wersjach Gita:
git switch -c nazwa-twojej-galenzi
Podgląd gałęzi:
Sprawdź, jakie gałęzie istnieją i na której aktualnie się znajdujesz (oznaczona gwiazdką *).
git branch
Przełączanie się między gałęziami:
git checkout nazwa-innej-galenzi
# Lub nowocześniej:
git switch nazwa-innej-galenzi
3. Scalanie Zmian (Merge)
Gdy skończysz pracę na swojej gałęzi (np. nowa-funkcja), musisz połączyć ją z główną gałęzią (main).
- Przełącz się na gałąź, do której chcesz scalić zmiany (zazwyczaj
main):git checkout main - Wykonaj scalenie:
git merge nowa-funkcja
Jeśli nikt nie zmieniał tych samych linii kodu co Ty w międzyczasie, Git wykona tzw. Fast-forward. Jeśli zmiany się nakładają, wystąpi Konflikt.
4. Konflikty (Merge Conflicts)
Konflikt to sytuacja, w której Git nie wie, którą wersję kodu zachować (np. dwie osoby zmieniły ten sam linijkę w tym samym pliku).
Jak rozwiązać konflikt?
1. Git poinformuje Cię o konflikcie podczas git merge lub git pull.
2. Otwórz plik w edytorze kodu. Zobaczysz znaczniki:
<<<<<<< HEAD
Kod, który był w gałęzi głównej
=======
Kod, który napisałeś Ty
>>>>>>> nowa-funkcja
<<<<, ====, >>>>) i zapisz plik.
4. Dodaj poprawiony plik i zatwierdź:
git add plik_z_konfliktem.txt
git commit -m "Rozwiązanie konfliktu"
5. Pull Requesty (PR) / Merge Requesty
Pull Request (PR) to funkcja platform hostingowych (GitHub, GitLab, Bitbucket), a nie samego Gita, ale jest kluczowa w nowoczesnym programowaniu.
Zamiast scalać (merge) kod lokalnie na swoim komputerze i wypychać go do main na serwerze, robisz to bezpieczniej:
- Wypychasz swoją gałąź (
nowa-funkcja) na serwer:git push origin nowa-funkcja - Wchodzisz na stronę repozytorium (np. GitHub).
- Klikasz "New Pull Request" (lub "Compare & Pull Request").
- Code Review: To moment dyskusji. Inni programiści widzą Twoje zmiany, mogą je komentować i prosić o poprawki zanim kod trafi do
main. - Po zatwierdzeniu przez zespół, klikasz przycisk Merge na stronie.
Dzięki temu main jest chroniony przed błędami i niesprawdzonym kodem.
6. .gitignore - Ignorowanie Plików
Nie wszystko powinno trafić do repozytorium. Pliki tymczasowe, hasła, lokalne konfiguracje środowiska czy gigantyczne foldery bibliotek (jak node_modules w JS czy venv w Pythonie) powinny być ignorowane.
W tym celu tworzy się plik o nazwie .gitignore w głównym katalogu projektu.
Przykładowa zawartość .gitignore:
# Logi systemowe
*.log
# Pliki środowiskowe (często zawierają hasła!)
.env
# Foldery instalacyjne
node_modules/
dist/
build/
7. Git Stash - Schowek
Czasami pracujesz nad czymś ("brudna robota"), ale musisz pilnie przełączyć się na inną gałąź, żeby naprawić błąd. Nie chcesz jeszcze robić commita, bo kod nie działa.
Użyj schowka:
- Schowaj zmiany:
Twój katalog roboczy jest teraz czysty (jak po ostatnim commicie).
git stash - Zrób to, co musisz na innej gałęzi.
- Wróć i przywróć zmiany:
git stash pop
Podsumowanie Workflow (Cykl Pracy)
Profesjonalny cykl pracy w Gicie wygląda zazwyczaj tak:
- Pobierz najnowsze zmiany:
git checkout main->git pull origin main - Stwórz gałąź na zadanie:
git checkout -b fix-header - Pracuj i zapisuj:
git add .->git commit -m "Poprawa nagłówka" - Wypchnij gałąź:
git push origin fix-header - Utwórz Pull Request na GitHubie/GitLabie.
- Czekaj na Code Review i ewentualnie wprowadzaj poprawki.
- Zscal (Merge) PR na platformie hostingowej.
- Wyczyść: Usuń lokalną gałąź
git branch -d fix-header.