Feature Branch in Git: cos'è, come creare e lavorare con i rami

Autore: IT Sectr Pubblicato: 2026-05-09 Tempo di lettura: 8 min

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 Branch — è un ramo Git separato per sviluppare una nuova funzionalità, isolato da develop e main.
  • Isolamento del codice consente a più sviluppatori di lavorare in parallelo su funzionalità diverse senza conflitti.
  • Pull Request — il meccanismo principale per la revisione del codice prima dell'unione del ramo feature in develop.
  • Regole di denominazione per i rami feature: feature/nome-funzione nel Git Flow standard.
  • Eliminazione del ramo dopo l'unione — una pratica obbligatoria per mantenere l'ordine nel repository.

Cos'è un Feature Branch in Git

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.

Flusso di lavoro con Feature Branch

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.

  1. Creazione del ramo dall'ultimo commit di develop. Lo sviluppatore passa a develop, lo aggiorna e crea un nuovo ramo feature.
  2. Sviluppo e commit nel ramo feature. Lo sviluppatore apporta modifiche, esegue commit con descrizioni chiare e invia periodicamente il ramo al repository remoto.
  3. Sincronizzazione con develop — durante lo sviluppo, il ramo principale potrebbe avanzare. Lo sviluppatore esegue un rebase o merge di develop nel proprio ramo feature.
  4. Creazione di una Pull Request — quando la funzionalità è pronta, lo sviluppatore apre una PR per la revisione del codice. Il team esamina il codice e lascia commenti.
  5. Unione ed eliminazione — dopo l'approvazione della PR, il ramo viene unito a develop ed eliminato sia localmente che in remoto.

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 del ramo feature

Frequenza di sincronizzazioneRischio conflittiComodità di sviluppo
GiornalieraBassoRichiede rebase o merge frequenti
SettimanaleMedioRitmo confortevole, conflitti moderati
MensileAltoRischio di risoluzione complessa dei conflitti
MaiCriticoL'unione potrebbe essere impossibile senza perdita di dati

Regole di denominazione dei rami feature

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/nome — il prefisso feature/ viene utilizzato nel Git Flow classico. Esempio: feature/added-auth-module.
  • feature/JIRA-123-descrizione — collegamento al numero dell'attività nel sistema di tracciamento. Esempio: feature/PROJ-42-add-login.
  • feature/tipo/nome — formato esteso con indicazione del tipo di attività. Esempio: 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.

Processo di Pull Request

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.

Consigli per creare una buona PR

  • Dimensione — non più di 300-400 righe di modifiche. PR grandi sono difficili da revisionare e la qualità della revisione diminuisce.
  • Una PR — un'attività — evitate di mescolare modifiche non correlate in una singola richiesta.
  • Screenshot — per modifiche all'interfaccia, allegate screenshot prima e dopo.
  • Test — per nuove funzionalità, scrivete test unitari e includeteli nella PR.

Strategie di unione dei rami feature

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.

  • Merge commit — crea un commit di unione, preservando l'intera cronologia dei commit del ramo feature. La cronologia rimane completa, ma il grafo di branching diventa più complesso.
  • Squash merge — combina tutti i commit del ramo feature in uno solo e lo aggiunge sopra develop. La cronologia diventa più pulita, ma le informazioni sui commit intermedi vengono perse.
  • Rebase and merge — riscrive i commit del ramo feature sopra l'ultimo commit di develop e unisce senza un commit aggiuntivo. La cronologia rimane lineare.

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.

Errori tipici nell'uso di Feature Branch

Anche gli sviluppatori esperti commettono errori quando lavorano con i rami feature. Conoscere i problemi tipici aiuta a evitare perdite di tempo e dati.

  • Vita troppo lunga del ramo — un ramo feature vive più di 2-3 settimane senza sincronizzazione con develop, portando a conflitti di unione massicci.
  • Commit con descrizioni poco chiare — messaggi come “fix” o “update” non spiegano cosa è stato modificato e perché.
  • Miscuglio di attività — nello stesso ramo feature vengono sviluppate due funzionalità non correlate, rendendo impossibile l'annullamento selettivo.
  • Mancanza di sincronizzazione — lo sviluppatore non esegue git fetch e non aggiorna develop, causando conflitti durante l'unione finale.

Il modo migliore per evitare questi problemi è concordare le regole di lavoro all'inizio del progetto e utilizzare controlli automatizzati nella pipeline CI/CD.

Esempi di comandi per lavorare con Feature Branch

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.

bash
# 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.

Automazione dei controlli nel ramo feature

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.

yaml
# 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

Si possono avere più rami feature contemporaneamente?

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.

Cosa fare se il ramo feature è molto indietro rispetto a develop?

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.

Cosa fare se il ramo feature non è più necessario senza unione?

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.

Qual è la differenza tra feature branch e task branch?

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.

È necessario eliminare il ramo feature dopo l'unione?

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

  • Feature Branch — un ramo temporaneo per lo sviluppo isolato di una funzionalità, creato da develop.
  • Isolamento del codice consente di lavorare in parallelo su diverse funzionalità senza conflitti o rischio di danneggiare il codice stabile.
  • Pull Request con revisione del codice obbligatoria è il meccanismo principale di controllo qualità prima di unire il ramo feature.
  • Regole di denominazione — prefisso feature/ con ID attività dal sistema di tracciamento e breve descrizione.
  • Sincronizzazione regolare con develop tramite rebase o merge è necessaria per ridurre al minimo i conflitti di unione.
  • Squash merge — la strategia ottimale per progetti mobili, che fornisce una cronologia pulita in develop.
  • Raccomandazione: limitate la durata del ramo feature a 5 giorni lavorativi ed eliminate il ramo immediatamente dopo l'unione.

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.

Discuti il progetto

Leggi anche