Branching e unione in Git: guida passo passo

Negli articoli precedenti, hai imparato "Come ripristinare un commit in Git" (tutorial PowerShell Git) e "Come effettuare il merge in Git: tutorial sui repository git locali e remoti". Puoi...
Jeff Brown
6 minuto di lettura
Ultimo aggiornamento 19 settembre 2023

Negli articoli precedenti, hai imparato "Come ripristinare un commit in Git" (tutorial PowerShell Git) e "Come unire in Git: tutorial sui repository git locali e remoti". Puoi anche utilizzare Git per creare rami nel tuo progetto. Il branching in Git consente a più sviluppatori di lavorare su un progetto modificando la base di codice di lavoro.

In questo articolo scoprirai di più sul branching in Git, sui diversi modi per creare rami e su come unirli a un repository locale o remoto.

Per seguire questo tutorial su Git e imparare a creare rami, ti servirà quanto segue:

Cos'è il branching in Git?

definizione di branching in git

Il branching in Git consente agli sviluppatori di staccarsi dalla versione di produzione del codice per correggere un bug o aggiungere una funzionalità. Gli sviluppatori creano rami per lavorare con una copia del codice senza modificare la versione esistente. Si creano rami per isolare le proprie modifiche al codice, che saranno testate prima di unirle al ramo principale (ne parleremo più avanti).

Non c'è niente di speciale nel ramo principale. È il primo ramo che crei quando inizializzi un repository Git utilizzando il comando git init.

Quando crei un commit, Git identifica l'istantanea dei file con un hash SHA-1 univoco. Quando inizialmente crei un ramo, Git crea un nuovo riferimento allo stesso commit su cui è attualmente attivo il ramo principale. Il diagramma seguente mostra che entrambi i rami hanno la stessa istantanea di codice a questo punto.

diagramma ramo 1

Man mano che crei commit nel nuovo ramo, Git crea nuovi riferimenti per monitorare le modifiche. Gli ultimi commit sono ora in anticipo rispetto ai commit del ramo principale. Mentre continui a creare nuovi commit, ogni ramo tiene traccia della propria versione dei file.

diagramma ramo 2

Git sa quale ramo hai controllato usando un riferimento speciale detto HEAD. Quando crei un nuovo ramo, Git non cambia immediatamente il riferimento HEAD sul nuovo ramo. Vedrai HEAD nel tutorial quando crei rami e visualizzi il registro dei commit.

diagramma ramo HEAD

Questa funzione di branching è ciò che rende Git davvero efficace. Diverse persone creano rami distinti per lavorare al loro codice e unire le modifiche al ramo principale. I rami devono essere temporanei e devono essere eliminati al termine del lavoro.

Strategie di denominazione dei rami

I nomi dei rami possono essere scelti da te. Tuttavia, l'organizzazione o il progetto potrebbero avere standard delineati per la denominazione dei rami. Ad esempio, assegnare un nome al ramo in base alla persona responsabile del lavoro su di esso e una descrizione o elemento di lavoro:

  • nome utente/descrizione
  • nome utente/elemento di lavoro

È possibile assegnare un nome a un ramo per indicarne la funzione, ad esempio una funzionalità, una correzione di bug o un hotfix:

  • correzione bug/descrizione
  • funzionalità/nome-funzionalità
  • hotfix/descrizione

Un'altra strategia di branching è quella di avere dei rami dedicati ai diversi cicli di sviluppo, come funzionalità o hotfix. Man mano che si visualizzano gli elementi di lavoro, si crea un ramo per quell'elemento dal rispettivo ramo. Sì, puoi creare un ramo da un altro ramo. Ad esempio, guarda l'opzione 4 di seguito.

Come creare un ramo in Git

Basta con la teoria, creiamo qualche ramo. Questi esempi utilizzano PowerShell 7 su un sistema Windows 10; tuttavia, è possibile utilizzare qualsiasi terminale che supporti i comandi Git.

Opzione 1: creazione di un ramo

Per creare un ramo, usa il comando git branch seguito dal nome del ramo. Dopo averlo creato, usa di nuovo git branch per visualizzare i rami disponibili.

Si noti che la creazione di un ramo in questo modo non passa automaticamente al nuovo ramo. Git usa un asterisco e un carattere di colore diverso per individuare quale ramo è attivo. Questa designazione rappresenta il riferimento HEAD che mostra quale ramo è attivo.

git branch <nome ramo>

git branch

creare un ramo

Opzione 2: Creazione di un ramo con checkout

Se vuoi creare un ramo ed eseguire contemporaneamente il checkout del ramo, utilizza il comando git checkout. L'opzione -b specifica il nome del ramo. Tieni presente che, dopo il completamento del comando, Git ha spostato HEAD nel nuovo ramo.

git checkout -b <nome ramo>

git branch

fare il check out del ramo

Opzione 1: creazione di un ramo da un commit

È possibile creare un ramo da un commit precedente su un ramo esistente. Ricorda, un commit è solo un'istantanea temporale dei file in un repository. Se vuoi lavorare su un'istantanea specifica dei file, puoi creare un ramo da un commit.

Prima di creare il ramo, è necessario l'identificatore SHA-1 del commit. Per trovarlo, usa il comando git log per visualizzare i commit precedenti. Ogni commit avrà un hash SHA-1 completo come identificatore. Tuttavia, sono necessari solo i primi caratteri per identificare il commit.

Quindi, usa lo stesso comando git branch dell'Opzione 1 ma aggiungi l'identificatore di commit alla fine. Questo esempio utilizza l'identificatore preso dal secondo commit, ossia 40b4d7.

Tieni presente che il designatore HEAD si trova sul ramo principale, ossia quello attivo. Gli altri rami jeff/funzionalità1 e jeff/funzionalità2 puntano allo stesso commit quando li hai creati in precedenza. Entrambi puntano alla stessa istantanea ogni ramo non ha avuto ulteriori commit fatti da quando è stato creato.

git log
git branch <nome ramo> <identificatore>

creare il commit del ramo

Opzione 1: creazione di un ramo da un altro ramo

Se utilizzi rami dedicati a hotfix o a funzionalità, crei rami da questi altri rami per lavorare sull'elemento. La creazione di un ramo a partire da un altro non è diversa dalla creazione del principale. Devi solo specificare il nome dell'altro ramo come punto di partenza. Questo esempio mostra la creazione del ramo funzionalità4 dal ramo di sviluppo.

git checkout -b funzionalità4 develop

Opzione 5: scaricare rami da un repository remoto

Anche se disponi di una copia locale di un repository con cui lavorare, vale lo stesso anche per altri sviluppatori. Questi avranno rami su cui stanno lavorando e possono inviare i propri rami a un repository remoto.

Lungo il percorso, potrebbe essere necessario lavorare su un altro ramo che non è in locale nel sistema. È possibile estrarre o scaricare rami specifici da un repository remoto per utilizzarli sul proprio sistema.

In un repository centrale ospitato in GitHub, i rami disponibili sono gli stessi sul sistema locale (principale, funzionalità1, funzionalità2 e hotfix1). Tuttavia, un altro sviluppatore di nome Maggie ha un ramo per hotfix2 che non è sul sistema locale. Maggie richiede la tua assistenza per lavorare su un hotfix, quindi devi scaricare questo ramo sul tuo sistema.

rami remoti

Per recuperarlo dal repository remoto, utilizza git pull in base all'origine e specifica il nome del ramo. Se controlli i rami locali disponibili, il nuovo ramo non viene visualizzato automaticamente. Tuttavia, puoi effettuare il check out e iniziare a lavorare su questo nuovo ramo.

git pull origin <nome ramo>
git branch
git checkout <nome ramo>
git branch

git pull ramo remoto

Unire i rami

Quando hai completato il lavoro sul tuo ramo, è il momento di unirlo a quello principale. L'unione prende le modifiche dei rami e le implementa nel ramo principale. A seconda della cronologia dei commit, Git esegue due operazioni di unione: rapida e a tre vie. Esaminiamo entrambe in base ai rami e alla cronologia dei commit nel seguente diagramma.

diagramma unione 1

Quando unisci il ramo hotfix al ramo principale, Git sposta il riferimento principale del ramo in avanti a commit nr7jk. Questo succede perché il ramo degli hotfix condivide un'antenato diretto commit con il ramo principale ed è più avanti rispetto al suo commit. Questo commit è un'unione rapida.

rapido

Dopo aver unito il ramo hotfix, continua a lavorare sul ramo funzionalità1. Mentre continui a fare commit sul ramo funzionalità1, la cronologia dei commit diverge.

cronologia commit divergente

Git non è in grado di spostare il riferimento sull'ultimo commit come in un commit rapido. Per portare il ramo funzionalità1 nel ramo principale, Git esegue un'unione a tre vie. Il software fa un'istantanea di tre diversi commit per crearne uno nuovo:

  • Il commit comune a entrambi i rami (a90hb)
  • L'ultimo commit del ramo (az84f)
  • Il commit del ramo con cui unirsi (nr7jk)

commit merge a 3 vie

Unione di rami in un repository locale

Per unire i rami localmente, usa git checkout per passare al ramo con il quale vuoi effettuare la fusione. Questo ramo è in genere il principale. Successivamente, utilizza git merge e specifica il nome dell'altro ramo da inserire in questo. Nell'esempio, il ramo jeff/funzionalità1 viene unito al ramo principale. Questa operazione è un'unione rapida.

git checkout principale
git merge jeff/funzionalità1

 

git merge ff

Il lavoro continua sul ramo principale e su altri rami, quindi non condividono più una cronologia dei commit comune. Ora uno sviluppatore vuole unire il ramo jeff/funzionalità2 al ramo principale. Invece, Git esegue un merge commit a tre vie (o ricorsivo).

git checkout principale
git merge jeff/funzionalità2

git merge recursivo

Unione di rami in un repository remoto

Se crei un ramo nel tuo repository locale, il repository remoto non è in grado di conoscerne l'esistenza. Prima di poter inviare il codice del ramo nel repository remoto, è necessario impostare il repository remoto come ramo upstream utilizzando il comando git push. Questo comando imposta contemporaneamente il ramo upstream e carica il contenuto del ramo al repository remoto.

git push --set-upstream origin <nome ramo>

git push set upstream

Fusione di "principale" in un ramo

Mentre lavori sul tuo ramo, altri sviluppatori possono aggiornare il ramo principale con il proprio. Questa azione significa che il tuo ramo non è aggiornato rispetto al principale e manca del contenuto. Puoi unire il ramo principale al tuo effettuando il checkout del ramo e utilizzando lo stesso comando git merge.

git checkout <nome ramo>
git merge principale

git merge a ramo

Domande frequenti su Git

Cosa significa creare un ramo in Git?

La creazione di un ramo acquisisce un'istantanea del codice esistente in modo che tu possa lavorare indipendentemente dal ramo principale.

Come faccio a creare un nuovo ramo in Git?

Usa il comando git branch e specifica il nome del ramo, ad esempio git branch funzionalità1.

Come posso vedere quale ramo è attivo?

Usa git branch per visualizzare i rami disponibili e quelli attivi. Solitamente, Git contrassegna il ramo attivo con un asterisco e un carattere di colore diverso.

Come si fa a passare da un ramo all'altro?

Usa git checkout e il nome del ramo per renderlo attivo.

Posso creare un ramo all'interno di un altro?

Sì, specifica il nome del ramo su cui basare quello nuovo, ad esempio git branch feature-bug funzionalità1.

Il mio ramo esiste solo in locale. Come faccio ad aggiungerlo al mio repository git remoto?

Utilizza il comando git push per impostare il ramo upstream, ad es. git push –set-upstream origin <nome ramo >.

Come faccio ad aggiornare il ramo principale con le modifiche del mio?

Passa al ramo principale utilizzando il comando git checkout, quindi unisci il ramo utilizzando il comando git merge insieme al nome del ramo.

Come faccio a eliminare un ramo?

Quando hai finito con un ramo, eliminalo con il comando git branch e l'opzione -d, ad esempio git branch -d funzionalità1.

Conclusione

Il branching in Git è una funzionalità molto efficace che consente ai team di lavorare sul codice in modo autonomo. Sapere come creare, denominare e unire i rami è un elemento essenziale per qualsiasi sviluppatore, amministratore di sistema o ingegnere DevOps.

O que devo fazer agora?

Listamos abaixo três recomendações para reduzir os riscos de dados na sua organização:

1

Agende uma demonstração conosco Veja a usabilidade de Varonis em uma sessão personalizada com base nas necessidades de segurança de dados da sua organização. Responderemos a todas as suas perguntas.

2

Veja um exemplo do nosso Relatório de Risco de Dados Conheça as ameaças que podem permanecer no seu ambiente. O Relatório da Varonis é gratuito e demonstra claramente como realizar a remediação automatizada.

3

Siga-nos no LinkedIn, YouTube et X (Twitter) Obtenha insights detalhados sobre todos os aspectos da segurança de dados, incluindo DSPM, detecção de ameaças, segurança de IA, entre outros.

Prova Varonis gratis.

Ottieni un report dettagliato sul rischio dei dati in base ai dati della tua azienda. Distribuzione in pochi minuti.

Keep reading

Varonis tackles hundreds of use cases, making it the ultimate platform to stop data breaches and ensure compliance.

guida-agli-array-powershell:-come-utilizzarli-e-crearli
Guida agli array PowerShell: come utilizzarli e crearli
Scopri come utilizzare al meglio gli array PowerShell: tratteremo delle nozioni di base su come crearli, lavorare e alcune tecniche più avanzate.
come-prepararsi-per-una-verifica-delle-autorizzazioni-salesforce
Come prepararsi per una verifica delle autorizzazioni Salesforce
In questo articolo illustrerò che cos'è una verifica Salesforce, come funzionano le autorizzazioni e darò suggerimenti su come prepararti.
il-futuro-della-sicurezza-dei-dati-nel-cloud:-fare-di-più-con-dspm
Il futuro della sicurezza dei dati nel cloud: fare di più con DSPM
Scopri cosa devi sapere quando valuti una soluzione DSPM, perché l'automazione IaaS è fondamentale e come puoi preparare la tua organizzazione per il futuro del DSPM.
che-cos'è-oauth?-definizione-e-funzionamento
Che cos'è OAuth? Definizione e funzionamento
OAuth (Open Authentication) è un protocollo o framework di autorizzazione a standard aperto che consente alle applicazioni di usufruire di un "accesso designato sicuro". È un modo per gli utenti di concedere a siti Web o alle applicazioni l'accesso alle proprie informazioni senza comunicare le password.