Git checkout
In questa pagina viene esaminato il comando git checkout
. Saranno illustrati esempi d'uso e casi limite. In termini Git, un "checkout" (estrazione) è l'atto di passare da una versione all'altra di un'entità di destinazione. Il comando git checkout
opera su tre entità distinte: file, commit e branch. Oltre alla definizione di "estrazione", il verbo "estrarre" è comunemente usato per implicare l'atto di eseguire il comando git checkout
. Nell'argomento Annullamento delle modifiche, abbiamo visto come git checkout
possa essere usato per visualizzare i commit meno recenti. Questo documento è incentrato per la maggior parte sulle operazioni di estrazione sui branch.
Eseguire il checkout dei branch è un'operazione simile al checkout dei commit e dei file meno recenti, in quanto la directory di lavoro viene aggiornata in modo da corrispondere al branch o alla revisione selezionati; tuttavia, le nuove modifiche vengono salvate nella cronologia del progetto (ovvero, non si tratta di un'operazione di sola lettura).
Esecuzione del checkout dei branch
Il comando git checkout
permette di spostarsi tra i branch creati tramite git branch
. Quando viene eseguito il checkout di un branch, i file nella directory di lavoro vengono aggiornati in modo da corrispondere alla versione memorizzata in quel branch e viene inviata a Git l'istruzione di registrare tutti i nuovi commit su tale branch. Pensa a questa operazione come a un modo per selezionare la linea di sviluppo su cui lavorare.
Avere una branch dedicato per ogni nuova funzione è un cambiamento radicale rispetto ai flussi di lavoro tradizionali di SVN. Rende estremamente facile fare nuovi esperimenti senza il timore di distruggere le funzioni esistenti e consente di lavorare su molte funzioni non correlate contemporaneamente. Inoltre, i branch agevolano anche diversi flussi di lavoro collaborativi.
Il comando git checkout
può essere a volte confuso con git clone
. La differenza tra i due comandi è che il comando clone recupera il codice da un repository remoto, mentre il comando checkout passa da una versione all'altra del codice già presente sul sistema locale.
materiale correlato
Registro Git avanzato
Scopri la soluzione
Impara a utilizzare Git con Bitbucket Cloud
Utilizzo: branch esistenti
Supponendo che il repository in cui stai lavorando contenga branch preesistenti, puoi passare da un branch all'altro usando git checkout
. Per scoprire quali branch sono disponibili e qual è il nome del branch corrente, esegui git branch
.
$> git branch
main
another_branch
feature_inprogress_branch
$> git checkout feature_inprogress_branch
L'esempio sopra mostra come visualizzare un elenco dei branch disponibili eseguendo il comando git branch
e come passare a un branch specificato, in questo caso, feature_inprogress_branch
.
Nuovi branch
git checkout
funziona di pari passo con git branch. Il comando git branch
può essere usato per creare un nuovo branch. Quando vuoi iniziare una nuova funzione, crei un nuovo branch da main
tramite git branch new_branch
. Una volta creato il branch, puoi usare git checkout new_branch
per andare a tale branch. Inoltre, il comando git checkout
accetta un argomento -b
che funge da metodo pratico per creare il nuovo branch e passare immediatamente a quest'ultimo. Puoi lavorare su più funzioni in un unico repository passando da una all'altra con git checkout
.
git checkout -b <new-branch>
L'esempio riportato sopra crea ed esegue simultaneamente il checkout di
. L'opzione -b
è un flag che comunica a Git di eseguire git branch
prima di eseguire git checkout
.
git checkout -b <new-branch> <existing-branch>
Per impostazione predefinita, git checkout -b
baserà il new branch
sull'HEAD
corrente. Un parametro di branch aggiuntivo opzionale può essere inviato a git checkout
. Nell'esempio riportato sopra, viene inviato <
existing-branch>
che quindi basa new-branch
su existing-branch
, invece che sull'HEAD
corrente.
Passaggio da un branch all'altro
Passare da un branch all'altro è un'operazione semplice. L'esecuzione di quanto segue consentirà di puntare HEAD
alla punta di
.
git checkout <branchname>
Git tiene traccia della cronologia delle operazioni di estrazione nel log di riferimento. Puoi eseguire git reflog
per visualizzare la cronologia.
Esecuzione di git checkout su un branch remoto
Quando si collabora con un team è comune utilizzare repository remoti. Questi repository possono essere ospitati e condivisi oppure possono essere una copia locale di un altro collega. Ogni repository remoto conterrà il proprio set di branch. Per estrarre un branch remoto, devi prima recuperare il contenuto di tale branch.
git fetch --all
Nelle versioni moderne di Git, puoi quindi estrarre il branch remoto come faresti con un branch locale.
git checkout <remotebranch>
Le versioni precedenti di Git richiedono la creazione di un nuovo branch basato su remote
.
git checkout -b <remotebranch> origin/<remotebranch>
Inoltre, è possibile estrarre un nuovo branch locale e reimpostarlo sull'ultimo commit dei branch remoti.
git checkout -b <branchname>
git reset --hard origin/<branchname>
HEADS scollegati
Ora che abbiamo visto i tre usi principali di git checkout
sui branch, è importante parlare dello stato "detatched HEAD"
. Ricorda che HEAD
è il modo utilizzato in Git per fare riferimento alla snapshot corrente. Internamente, il comando git checkout
aggiorna semplicemente l'HEAD
in modo che punti al branch o al commit specificato. Quando punta a un branch, in Git non si verificano errori, se invece selezioni un commit, Git passa allo stato "detatched HEAD"
.
Questo è un avviso che ti informa che le attività che stai svolgendo sono "scollegate" dal resto dello sviluppo del progetto. Se dovessi iniziare a sviluppare una funzione mentre sei nello stato con HEAD
scollegato, non ci sarebbe alcun branch che ti consenta di tornare alla funzione. Quando inevitabilmente esegui il checkout di un altro branch (ad esempio, per eseguire il merge della funzione), non ci sarebbe modo di fare riferimento alla funzione:
Il punto è che le attività di sviluppo dovrebbero sempre avvenire su un branch e mai su un HEAD
scollegato. In questo modo, potrai assicurarti di avere sempre un riferimento per i nuovi commit. Tuttavia, se stai solo guardando un commit meno recente, non importa se ti trovi nello stato con HEAD
scollegato o meno.
Riepilogo
Questa pagina è incentrata sull'utilizzo del comando git checkout
durante la modifica dei branch. In sintesi, git checkout
, se usato sui branch, altera la destinazione del riferimento HEAD
. Può essere utilizzato per creare branch, passare da un branch all'altro ed estrarre i branch remoti. Il comando git checkout
è uno strumento essenziale per il funzionamento standard di Git. È l'equivalente di git merge. I comandi git checkout
e git merge
sono strumenti fondamentali dei flussi di lavoro Git.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.