Simyl
simylflow
Home del Corso
Modulo 2: Controllo del Codice Sorgente e Fondamenti di Git
Lezione 3 di 5
15 min

Branch e Pull Request

Il livello di collaborazione di Git.

1Perché Esistono i Branch

I branch esistono perché il lavoro di ingegneria reale non avviene in un'unica sequenza lineare. In un dato momento, un team di cinque persone potrebbe avere tre funzionalità in corso, una correzione di bug in revisione e una modifica all'infrastruttura in attesa di una finestra di deploy. Senza branch, tutto questo lavoro entrerebbe in collisione in un unico workspace condiviso — funzionalità incomplete che si rompono a vicenda, una correzione di bug che viene rilasciata accidentalmente con una funzionalità incompleta, modifiche all'infrastruttura che si intrecciano con il codice del prodotto.

Un branch offre a ogni flusso di lavoro il proprio contesto isolato. Puoi rompere le cose, sperimentare, fare refactoring in modo aggressivo — e nulla di tutto ciò influisce sui tuoi colleghi finché non scegli esplicitamente di fare il merge. Questo isolamento è ciò che rende possibile il lavoro parallelo senza un overhead costante di coordinamento.

Ma l'isolamento è solo metà del valore. I branch riducono anche il costo della sperimentazione. Vuoi provare un algoritmo diverso? Crea un branch, fai un prototipo, esegui benchmark. Se è più veloce, fai il merge. Se non lo è, elimina il branch. Costo totale: zero danni alla codebase condivisa, zero rumore nella cronologia dei commit, zero rollback necessari. I team che creano branch liberamente provano più approcci e trovano soluzioni migliori. I team che trattano il branching come un'operazione pesante (o lo saltano del tutto committando su main) o sperimentano meno o sperimentano in modo pericoloso.

2Le Pull Request come Contratti Sociali

Una pull request è una proposta: "Ecco cosa ho modificato, ecco perché, e vorrei che qualcuno lo guardasse prima del merge." Sembra semplice, ma rappresenta un cambiamento fondamentale dal controllo qualità implicito a quello esplicito.

Senza PR, la revisione del codice è opzionale, ad-hoc e incoerente. Forse qualcuno guarda il tuo codice prima che venga rilasciato, forse no. Forse ne guarda una parte. Forse lo guarda dopo che è già in produzione. Le PR rendono la revisione un gate — il codice non raggiunge main finché almeno un altro sviluppatore non l'ha letto, compreso l'intento e approvato l'approccio.

Non si tratta di individuare bug (anche se lo fa). Si tratta di ownership condiviso. Quando una PR viene revisionata e approvata, la modifica non è più "il codice di Sarah" — è il codice del team. Il revisore sta dicendo "lo capisco, sono d'accordo con l'approccio e mi sento a mio agio nel mantenerlo." Questo ownership distribuito significa che nessun singolo sviluppatore diventa un collo di bottiglia o un single point of failure.

Le PR creano anche un registro delle decisioni. La descrizione spiega il perché, il diff mostra il cosa, e i commenti di revisione catturano i compromessi considerati. Tre mesi dopo, quando qualcuno chiede "perché l'abbiamo costruito in questo modo?", la PR ha la risposta — incluse le alternative che sono state discusse e scartate.

3La Revisione del Codice come Conversazione, Non come Gatekeeping

La revisione del codice va male quando diventa un rituale di gatekeeping — un senior engineer che blocca i merge con pignolerie di stile mentre il team aspetta. Quella non è revisione; è un collo di bottiglia mascherato da qualità.

Una buona revisione del codice è una conversazione tra pari. Il compito del revisore non è dimostrare di saperne di più — è chiedere "ho capito il tuo intento?" e "hai considerato questo caso limite?" I migliori commenti di revisione sono domande, non direttive. "Cosa succede se questa lista è vuota?" insegna più di "Aggiungi un controllo null qui."

Tre principi che mantengono la revisione produttiva:

  • Rivedi l'approccio, non la sintassi. I linter catturano la formattazione. Gli esseri umani dovrebbero concentrarsi su logica, architettura e naming — cose che le macchine non possono valutare.
  • Rispondi in ore, non in giorni. Una PR che resta in revisione per 72 ore è lavoro bloccato. Se non puoi revisionare oggi, dillo — lascia che qualcun altro se ne occupi.
  • Distingui tra bloccante e non bloccante. "Questo andrà in crash in produzione" è un blocco. "Chiamerei questa variabile in modo diverso" è un suggerimento. Mescolarli e ogni revisione sembrerà una battaglia.

La cultura della revisione è anche uno degli strumenti di onboarding più efficaci che un team abbia. Un nuovo sviluppatore che legge le revisioni delle PR impara i pattern, le preferenze e gli errori passati del team più velocemente di quanto qualsiasi documentazione potrebbe insegnargli. L'archivio delle revisioni è una guida di stile vivente.

I branch di lunga durata sono debito tecnico

Ogni giorno che un branch vive separato da main, il merge diventa più difficile. I branch dovrebbero vivere giorni, non settimane.

Punti Chiave
  • I branch ti permettono di sperimentare senza rompere il lavoro condiviso
  • Le PR sono il modo in cui i team rendono esplicita la revisione del codice
  • I branch di lunga durata sono debito — fai merge spesso
Errori Comuni da Evitare
  • Nomi di branch come `fix-stuff` o `john-branch`
  • PR che modificano 50 file in un colpo solo