Branch e chirurgia

Branch, remote e barra laterale

Un'unica barra laterale, riordinabile e ricercabile, contiene branch, remote, tag, stash, worktree e sottomoduli. Ogni sezione può essere nascosta o riordinata (Impostazioni → Layout), e il filtro di ricerca vale per tutte. Quali sezioni e cartelle restano aperte o chiuse viene ricordato per repository, anche dopo un riavvio.

La barra laterale è una pila di riquadri, non una lista lunga. Una sezione aperta prende l'altezza lasciata da quelle chiuse, che restano sotto come intestazioni; aprine più di una e si dividono quell'altezza in parti uguali, ognuna con il proprio scroll. Una sezione con centinaia di tag scorre nel suo riquadro e le altre intestazioni restano dove sono, così niente da cliccare esce dallo schermo. Se ne apri più di quante ne stiano, tutti i riquadri si restringono insieme fino all'intestazione — la barra laterale stessa non scorre mai.

Solo Local parte aperta in un repository che non hai ancora sistemato; ogni altra sezione parte come intestazione. Una sezione con più di 300 riferimenti parte chiusa comunque. In un repository con migliaia di rami remoti mai cancellati sarebbero altrimenti tutti a schermo senza averli chiesti; aprila una volta e la scelta viene ricordata come le altre.

La barra laterale, con i branch appuntati tenuti in cima

Branch

Crea, fai checkout, rinomina ed elimina — locali e remoti. Le righe dei branch mostrano:

  • ↑avanti / ↓indietro rispetto al proprio upstream,
  • badge di presenza per remote (quali remote hanno questo branch),
  • un punto di rischio dopo una scansione del radar dei conflitti,
  • un marcatore ⟳ quando il remote ha riscritto la storia.

I branch con / nel nome si raggruppano automaticamente in cartelle richiudibili. Un prefisso con un solo figlio resta una cartella — release/1.2.3 è release con 1.2.3 dentro — così aggiungere release/1.2.4 dopo non ridisegna l’albero. Una sequenza di cartelle con un solo figlio si comprime in un’intestazione (dependabot/npm_and_yarn). Le intestazioni di cartella hanno il segno cartella; la ref, il segno branch, remoto o tag.

Un clic destro sull'intestazione di una cartella agisce sull'intero gruppo: Elimina tutti i branch sotto feature (4 branch) rimuove tutto il contenuto dopo un'unica conferma che elenca esattamente quali branch se ne vanno — il branch su cui ti trovi è escluso. Lo stesso menu esiste sulle cartelle dei branch remoti, eliminando dal remote.

Il menu a tendina dei branch nella barra degli strumenti elenca i branch locali e remoti. Fai clic destro su un branch in quel menu per rinominare un branch locale, copiarne il nome, aprirlo in un nuovo worktree, fonderlo nel branch attivo o eliminarlo. I branch remoti omettono la rinomina e vengono eliminati dal loro remoto dopo una conferma. Gitcito omette il merge quando il riferimento selezionato è già contenuto nel branch attivo e disabilita la creazione del worktree quando quel branch è già estratto.

Azioni sul branch locale nel menu a tendina della barra degli strumenti

Azioni sul branch remoto nel menu a tendina della barra degli strumenti

Le righe si selezionano in gruppo come i file: un clic con ⌘/Ctrl commuta una riga, un clic con Maiusc seleziona un intervallo, e Maiusc+↑/↓ estende la selezione dall'ultima riga cliccata. Un clic destro sulla selezione apre il menu di gruppo — Elimina 4 branch — che conferma con l'elenco completo. Gli stessi gesti funzionano su branch remoti, tag e stash.

Nomi di branch separati da slash raccolti in un albero

Rinominare un branch

Un branch chiamato fix tre giorni fa è un branch che oggi nessuno sa collocare. Rinominalo da dove hai notato il problema:

Dove Come
Barra laterale Clic destro sul branch → Rinomina…
Menu a tendina dei branch nella toolbar Clic destro sul branch → Rinomina…
Grafo dei commit Clic destro sul badge del branch su un commit → Rinomina…
Palette dei comandi ⌘/Ctrl+K → Rinomina il branch (agisce sul branch attivo)

Una rinomina locale è git branch -m: immediata e annullabile con ⌘Z — la voce di undo rimette il nome precedente. Rinominare il branch su cui ti trovi ti lascia lì.

Se il branch traccia un remoto, il menu offre anche Rinomina (anche sul remoto)…, che rinomina in locale, pubblica il nuovo nome ed elimina quello vecchio a monte. Questo non è annullabile: il vecchio branch remoto non c'è più e chi lo aveva in checkout deve ripuntare. Su un badge del grafo compare solo se il branch traccia esattamente un remoto; con più remoti scegli il branch dalla barra laterale, così l'upstream è univoco.

Limiti: Gitcito non riscrive nulla che facesse riferimento al vecchio nome — le pull request aperte puntano ancora al branch con cui sono state aperte e le regole di CI basate su un pattern di branch smettono di corrispondere. Rinominare un branch in checkout in un altro worktree fallisce, e git lo dice.

Pull e push di un branch su cui non sei

Fai clic destro su un branch locale: le voci Pulla e Pusha agiscono su quel branch, non su quello in checkout — niente deviazioni per aggiornare tre branch. Vedi fetch, pull e push.

Branch appuntati

Metti una stella sui branch a cui torni di continuo — passa sopra la riga e clicca ★, oppure clic destro → Appunta il branch. Compaiono in un gruppo Appuntati in cima alla sezione Locali, ricordato per repository, pur restando al loro posto normale più in basso.

Fare checkout di un branch remoto

Doppio clic su un branch remoto per creare quello locale che lo traccia. Se esiste già un branch locale con quel nome ed è divergente, Gitcito ti chiede come riconciliarlo — rebase, merge o reset — e ti offre di farne prima un backup.

La richiesta per il branch divergente: rebase, merge o reset, con l'opzione di backup

Quando il tuo branch locale è indietro

Viene portato avanti (fast-forward) alla punta del remoto durante il checkout. Un albero di lavoro sporco finisce in uno stash con nome e viene ripristinato dopo, così le modifiche locali non interrompono l'aggiornamento.

Quando il tuo branch locale è avanti

Se il branch locale è avanti e il remoto non ha nulla di nuovo, il checkout risponderebbe a una richiesta del branch remoto con il tuo lavoro non ancora pushato — quindi non viene cambiato nulla finché non dici quale lato intendevi:

Scelta Cosa succede
Passa al locale Passa al branch locale, commit intatti. Quello che ogni altro client fa in silenzio.
Reimposta (soft) Riporta il branch alla punta del remoto; le modifiche dei commit restano in stage, pronte per un nuovo commit.
Reimposta (mixed) Stesso spostamento, modifiche lasciate fuori dallo stage nell'albero di lavoro.
Reimposta (hard) Scarta i commit e le loro modifiche.

Il dialogo del branch avanti: passa al locale, oppure reset soft, mixed o hard

Lascia spuntato Crea prima un branch di backup e la punta locale viene salvata come backup/<branch>-<timestamp> prima di ogni spostamento: anche un reset hard resta a un checkout di distanza dall'essere annullato. Il reset entra anche nello stack di annullamento (⌘Z), ma solo finché non chiudi il repository — il branch di backup dura più a lungo.

Limiti: il dialogo confronta il branch solo con il riferimento di tracking appena recuperato, quindi un remoto che ha rifiutato il fetch (offline, credenziali errate) viene confrontato con l'ultima punta nota. Non dice se i tuoi commit sono buoni: solo che esistono qui e non lì.

Remote

La sezione Remote della barra laterale è dove si aggiungono, modificano, recuperano e rimuovono i remote. Fetch, pull o push su un repository che non ne ha nessuno apre lo stesso dialogo Aggiungi remoto — incolla un URL o crea il repo sull'host — invece di non fare nulla. Vedi fetch, pull e push.

Vedi anche: Merge e rebase · Worktree

Migliora questa traduzione su GitHub