Feature Branch „ to technika rozgałęziania w Git, w której każda nowa funkcja jest rozwijana w osobnej gałęzi, izolowanej od głównego kodu. Pozwala to kilku programistom jednocześnie pracować nad różnymi zadaniami bez ryzyka uszkodzenia stabilnej wersji projektu. Według Atlassian, 2024, Feature Branch jest kluczowym elementem Git Flow i jest używany w większości komercyjnych projektów.
Najważniejsze
feature/nazwa-funkcji w standardowym Git Flow.Feature Branch (gałąź funkcji) „ to tymczasowa gałąź w Git, tworzona z develop do tworzenia oddzielnej funkcjonalności. W przeciwieństwie do długożyciowych gałęzi main i develop, gałęzie feature istnieją ograniczony czas „ od kilku godzin do kilku tygodni.
Głównym celem feature branch jest izolowanie zmian związanych z jednym zadaniem od reszty kodu. Programista może eksperymentować, robić wiele commitów, a nawet psuć kod w swojej gałęzi, nie wpływając na pracę innych członków zespołu.
Po zakończeniu tworzenia gałąź feature jest scalana z powrotem do develop przez Pull Request z obowiązkowym przeglądem kodu. Po scaleniu gałąź jest zwykle usuwana, aby repozytorium pozostawało czyste.
Według Vincent Driessen, 2010, model Git Flow z gałęziami feature stał się standardem branży dzięki wyraźnemu podziałowi odpowiedzialności między różnymi typami gałęzi.
Workflow z feature branch składa się z sekwencji kroków, które programista wykonuje dla każdej nowej funkcji. Ten proces minimalizuje konflikty scalania i zapewnia kontrolę jakości kodu.
Okresowa synchronizacja z develop jest krytycznie ważna. Im dłużej żyje gałąź feature bez scalania zmian z develop, tym większe prawdopodobieństwo konfliktów przy końcowym scaleniu.
| Częstotliwość synchronizacji | Ryzyko konfliktów | Wygoda tworzenia |
|---|---|---|
| Codziennie | Niskie | Wymaga częstego rebase lub merge |
| Raz w tygodniu | Średnie | Komfortowy tryb, umiarkowane konflikty |
| Raz w miesiącu | Wysokie | Ryzyko złożonych merge conflict resolution |
| Nigdy | Krytyczne | Scalenie może być niemożliwe bez utraty danych |
Nazewnictwo gałęzi „ ważna część dyscypliny zespołowej. Jednolity standard nazw pozwala szybko określić, nad jakim zadaniem trwa praca i kto je wykonuje.
feature/added-auth-module.feature/PROJ-42-add-login.feature/feat/analytics-dashboard.Używanie ID zadania z JIRA, Trello lub innego systemu to najlepsza praktyka. Automatycznie łączy kod z zadaniem i upraszcza wyszukiwanie gałęzi przez git log.
Pull Request (lub Merge Request w GitLab) „ to żądanie scalenia gałęzi feature z develop. PR to nie tylko operacja techniczna, ale proces zespołowego przeglądu kodu, który podnosi jakość kodu i rozpowszechnia wiedzę w zespole.
Dobry PR zawiera tytuł z krótkim opisem zadania, link do ticketa i opis zmian. Programista powinien wskazać, co dokładnie zostało zrobione, jakie pliki zostały zmienione i czy istnieją potencjalne ryzyka dla innych części projektu.
Zespół przegląda kod w PR, zostawia komentarze, żąda zmian (change requests) i zatwierdza scalenie (approve). Po zatwierdzeniu PR wykonywany jest merge lub squash merge.
Średni czas sprawdzania PR w rozwoju mobilnym wynosi od 4 do 24 godzin. Biblioteka Danger automatyzuje część sprawdzeń, uruchamiając lintery i testy bezpośrednio w PR.
Po zatwierdzeniu PR gałąź feature może być scalona z develop na różne sposoby. Wybór strategii scalania wpływa na historię commitów i możliwość wycofania zmian.
Dla projektów mobilnych z częstymi wydaniami najczęściej używa się squash merge: daje czystą historię w develop, a szczegóły tworzenia pozostają w opisie PR i w zadaniu trackera.
Nawet doświadczeni programiści popełniają błędy przy pracy z gałęziami feature. Znajomość typowych problemów pomaga uniknąć straty czasu i danych.
Najlepszym sposobem uniknięcia tych problemów jest ustalenie zasad pracy na starcie projektu i używanie automatycznych sprawdzeń w pipeline CI/CD.
Rozważmy praktyczny scenariusz: programista zaczyna nową funkcję autoryzacji w aplikacji mobilnej. Tworzy gałąź feature, pracuje nad kodem i kończy zadanie Pull Requestem.
# Aktualizacja develop i utworzenie gałęzi feature
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# Praca nad funkcją: commity
git add src/ui/login/
git commit -m "Add login screen layout"
# Wysłanie gałęzi feature na serwer
git push origin feature/add-login-screen
# Synchronizacja z develop (rebase)
git fetch origin develop
git rebase origin/develop
# Po zatwierdzeniu PR: aktualizacja lokalnego develop i usunięcie gałęzi
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
Polecenie git branch -d usuwa gałąź tylko po tym, jak jej zmiany zostaną w pełni scalone. Jeśli gałąź nie jest scalona, Git zaproponuje użycie git branch -D do wymuszonego usunięcia „ używaj tego flagi ostrożnie.
Pipeline CI/CD powinien uruchamiać się dla każdej gałęzi feature przed utworzeniem PR. Pozwala to wykryć problemy na wczesnym etapie, zanim kod trafi do przeglądu innym programistom.
# GitHub Actions do sprawdzania gałęzi feature
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
Pipeline sprawdza, czy kod się kompiluje, testy przechodzą i styl kodu jest zgodny z przyjętymi w zespole standardami. Dopiero po przejściu wszystkich sprawdzeń można utworzyć Pull Request.
Często zadawane pytania
Tak, to standardowa praktyka. Każdy programista może pracować w swojej gałęzi feature, a wszystkie są synchronizowane z develop niezależnie. Główna zasada „ jedna gałąź na jedno zadanie, aby uniknąć zależności cross-task w kodzie.
Wykonaj git rebase origin/develop na swojej gałęzi feature. Jeśli pojawią się konflikty „ rozwiązuj je pojedynczo, commity zostaną przepisane na wierzch ostatniego stanu develop. Po rebase wymagane będzie git push --force do aktualizacji zdalnej gałęzi.
Jeśli zadanie zostało anulowane, gałąź feature można po prostu usunąć. Użyj git branch -d feature/name dla lokalnej gałęzi i git push origin --delete feature/name dla zdalnej. Wszystkie niezcommitowane zmiany zostaną utracone.
W zasadzie to to samo. Różne zespoły używają różnych prefiksów: feature/, task/, feat/. Różnicy w mechanice Git nie ma „ wszystkie są tymczasowymi gałęziami utworzonymi z develop do izolowanego tworzenia.
Tak, to obowiązkowa praktyka. Gałęzie po scaleniu zaśmiecają listę referencji i mogą powodować zamieszanie. Większość platform (GitHub, GitLab) oferuje usunięcie gałęzi zaraz po merge PR, a lokalne gałęzie usuwa się poleceniem git branch -d.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również