Feature Branch — è una tecnica di branching in Git in cui ogni nuova funzionalità viene sviluppata in un ramo separato, isolato dal codice principale. Ciò consente a più sviluppatori di lavorare contemporaneamente su attività diverse senza rischiare di danneggiare la versione stabile del progetto. Secondo Atlassian, 2024, Feature Branch è un elemento chiave di Git Flow ed è utilizzato nella maggior parte dei progetti commerciali.
Punti chiave
feature/nome-funzione nel Git Flow standard.Feature Branch (ramo di funzionalità) è un ramo temporaneo in Git creato da develop per sviluppare una funzionalità specifica. A differenza dei rami longevi main e develop, i rami feature esistono per un tempo limitato — da poche ore a poche settimane.
Lo scopo principale del feature branch è isolare le modifiche relative a un'attività dal resto del codice. Lo sviluppatore può sperimentare, fare numerosi commit e persino rompere il codice nel proprio ramo senza influenzare il lavoro degli altri membri del team.
Dopo aver completato lo sviluppo, il ramo feature viene riunito in develop tramite una Pull Request con revisione del codice obbligatoria. Dopo l'unione, il ramo viene solitamente eliminato per mantenere pulito il repository.
Secondo Vincent Driessen, 2010, il modello Git Flow con rami feature è diventato uno standard industriale grazie alla chiara separazione delle responsabilità tra diversi tipi di rami.
Il flusso di lavoro con feature branch consiste in una sequenza di passaggi che lo sviluppatore esegue per ogni nuova funzionalità. Questo processo riduce al minimo i conflitti di unione e garantisce il controllo qualità del codice.
La sincronizzazione periodica con develop è di fondamentale importanza. Più a lungo un ramo feature vive senza unire le modifiche da develop, maggiore è la probabilità di conflitti durante l'unione finale.
| Frequenza di sincronizzazione | Rischio conflitti | Comodità di sviluppo |
|---|---|---|
| Giornaliera | Basso | Richiede rebase o merge frequenti |
| Settimanale | Medio | Ritmo confortevole, conflitti moderati |
| Mensile | Alto | Rischio di risoluzione complessa dei conflitti |
| Mai | Critico | L'unione potrebbe essere impossibile senza perdita di dati |
La denominazione dei rami è una parte importante della disciplina di squadra. Uno standard di denominazione uniforme consente di identificare rapidamente su quale attività si sta lavorando e chi la sta eseguendo.
feature/added-auth-module.feature/PROJ-42-add-login.feature/feat/analytics-dashboard.L'uso dell'ID attività da JIRA, Trello o un altro sistema è una best practice. Collega automaticamente il codice all'attività e semplifica la ricerca dei rami tramite git log.
Pull Request (o Merge Request in GitLab) è una richiesta di unire il ramo feature in develop. Una PR non è solo un'operazione tecnica, ma un processo di revisione del codice di squadra che migliora la qualità del codice e diffonde la conoscenza all'interno del team.
Una buona PR contiene un titolo con una breve descrizione dell'attività, un link al ticket e una descrizione delle modifiche. Lo sviluppatore deve indicare cosa è stato fatto esattamente, quali file sono stati modificati e se ci sono potenziali rischi per altre parti del progetto.
Il team esamina il codice nella PR, lascia commenti, richiede modifiche (change requests) e approva l'unione (approve). Dopo l'approvazione, viene eseguito un merge o squash merge.
Il tempo medio di revisione di una PR nello sviluppo mobile va da 4 a 24 ore. La libreria Danger automatizza parte dei controlli, eseguendo linters e test direttamente nella PR.
Dopo l'approvazione della PR, il ramo feature può essere unito a develop in diversi modi. La scelta della strategia di unione influisce sulla cronologia dei commit e sulla possibilità di annullare le modifiche.
Per progetti mobili con rilasci frequenti, il squash merge è il più utilizzato: fornisce una cronologia pulita in develop, mentre i dettagli dello sviluppo rimangono nella descrizione della PR e nell'attività del tracker.
Anche gli sviluppatori esperti commettono errori quando lavorano con i rami feature. Conoscere i problemi tipici aiuta a evitare perdite di tempo e dati.
Il modo migliore per evitare questi problemi è concordare le regole di lavoro all'inizio del progetto e utilizzare controlli automatizzati nella pipeline CI/CD.
Consideriamo uno scenario pratico: uno sviluppatore inizia una nuova funzionalità di autenticazione in un'applicazione mobile. Crea un ramo feature, lavora sul codice e completa l'attività con una Pull Request.
# Aggiornare develop e creare il ramo feature
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# Lavoro sulla funzionalità: commit
git add src/ui/login/
git commit -m "Add login screen layout"
# Inviare il ramo feature al server remoto
git push origin feature/add-login-screen
# Sincronizzazione con develop (rebase)
git fetch origin develop
git rebase origin/develop
# Dopo l'approvazione della PR: aggiornare develop locale ed eliminare il ramo
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
Il comando git branch -d elimina il ramo solo dopo che le sue modifiche sono state completamente unite. Se il ramo non è stato unito, Git suggerirà di usare git branch -D per l'eliminazione forzata — usate questo flag con cautela.
La pipeline CI/CD dovrebbe essere eseguita per ogni ramo feature prima di creare una PR. Ciò consente di rilevare i problemi in una fase precoce, prima che il codice arrivi alla revisione di altri sviluppatori.
# GitHub Actions per verificare il ramo 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
La pipeline verifica che il codice compili, i test superino e lo stile del codice sia conforme agli standard del team. Solo dopo aver superato tutti i controlli è possibile creare una Pull Request.
Domande frequenti
Sì, è una pratica standard. Ogni sviluppatore può lavorare nel proprio ramo feature e tutti si sincronizzano con develop indipendentemente. La regola principale è un ramo per attività per evitare dipendenze incrociate nel codice.
Eseguite git rebase origin/develop sul vostro ramo feature. Se sorgono conflitti, risolveteli uno per uno — i commit verranno riscritti sopra l'ultimo stato di develop. Dopo il rebase, sarà necessario git push --force per aggiornare il ramo remoto.
Se l'attività è stata cancellata, è sufficiente eliminare il ramo feature. Usate git branch -d feature/nome per il ramo locale e git push origin --delete feature/nome per quello remoto. Tutte le modifiche non committate andranno perse.
In sostanza è la stessa cosa. Team diversi usano prefissi diversi: feature/, task/, feat/. Non c'è differenza nella meccanica di Git — sono tutti rami temporanei creati da develop per lo sviluppo isolato.
Sì, è una pratica obbligatoria. I rami dopo l'unione ingombrano l'elenco dei riferimenti e possono causare confusione. La maggior parte delle piattaforme (GitHub, GitLab) offre di eliminare il ramo immediatamente dopo il merge della PR, e i rami locali vengono eliminati con il comando git branch -d.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche