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:
- Il client Git PowerShell installato sul tuo sistema (download e guida all'installazione)
- Un account GitHub gratuito
- Connessione a GitHub con SSH
Cos'è il 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.
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.
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.
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
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
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>
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.
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
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.
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.
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.
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)
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
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
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>
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
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:
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.
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.
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.