Questa pagina è un esame del comando git checkout
. Tratterà esempi di utilizzo e casi limite. In termini di Git, un “checkout” è 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 “checkout”, la frase “check out” è comunemente usata per implicare l’atto di eseguire il comando git checkout
. Nell’argomento Annullamento modifiche, abbiamo visto come git checkout
può essere utilizzato per visualizzare i vecchi commit. Il focus per la maggior parte di questo documento saranno le operazioni di checkout sui branch.
Il check out dei branch è simile al check out dei vecchi commit e file in quanto la directory di lavoro viene aggiornata per corrispondere al branch / revisione selezionato; tuttavia, le nuove modifiche vengono salvate nella cronologia del progetto, ovvero non è un’operazione di sola lettura.
Estrazione di rami
Il git checkout
ti consente di navigare tra i rami creati da git branch
. Il check out di un ramo aggiorna i file nella directory di lavoro in modo che corrispondano alla versione memorizzata in quel ramo e dice a Git di registrare tutti i nuovi commit su quel ramo. Consideralo un modo per selezionare la linea di sviluppo su cui stai lavorando.
Avere un ramo dedicato per ogni nuova funzionalità è un cambiamento radicale da un flusso di lavoro SVN tradizionale. Rende incredibilmente facile provare nuovi esperimenti senza il timore di distruggere le funzionalità esistenti e consente di lavorare su molte funzionalità non correlate contemporaneamente. Inoltre, i rami facilitano anche diversi flussi di lavoro collaborativi.
Il comando git checkout
può essere occasionalmente confuso con git clone
. La differenza tra i due comandi è che clone funziona per recuperare codice da un repository remoto, in alternativa checkout funziona per passare da una versione di codice già presente al sistema locale.
Utilizzo: rami esistenti
Supponendo che il repository in cui stai lavorando contenga rami preesistenti, puoi passare da un ramo all’altro utilizzando git checkout
. Per scoprire quali rami sono disponibili e qual è il nome del ramo corrente, eseguire git branch
.
L’esempio sopra mostra come visualizzare un elenco di rami disponibili eseguendo il git branch
e passa a un ramo specificato, in questo caso, feature_inprogress_branch
.
Nuovi rami
Git checkout
funziona mano nella mano con git branch
. Il comando git branch
può essere utilizzato per creare un nuovo ramo. Quando desideri avviare una nuova funzione, crei un nuovo ramo utilizzando git branch new_branch
. Una volta creato, puoi utilizzare git checkout new_branch
per passare a quel ramo. Inoltre, il comando git checkout
accetta un argomento -b
che funge da comodo metodo che creerà il nuovo ramo e vi passerà immediatamente. Puoi lavorare su più funzionalità in un unico repository passando da una all’altra con git checkout
.
L’esempio precedente crea ed estrae simultaneamente . L’opzione
-b
è un flag di convenienza che dice a Git di eseguire git branch
prima di eseguire git checkout
.
Per impostazione predefinita, git checkout -b
baserà new-branch
HEAD
. È possibile passare un parametro di ramo aggiuntivo facoltativo a git checkout
. Nell’esempio precedente, viene passato che quindi basa
new-branch
su existing-branch
anziché l’attuale HEAD
.
Cambio di ramo
Il cambio di ramo è un’operazione semplice. L’esecuzione di quanto segue indicherà HEAD
alla punta di .
Git tiene traccia della cronologia delle operazioni di checkout nel reflog. Puoi eseguire git reflog
per visualizzare la cronologia.
Git Checkout a Remote Branch
Quando si collabora con un team è comune utilizzare il telecomando repository. Questi repository possono essere ospitati e condivisi o possono essere la copia locale di un altro collega. Ogni repository remoto conterrà il proprio insieme di rami. Per effettuare il checkout di un ramo remoto devi prima recuperare il contenuto del ramo.
Nelle versioni moderne di Git, puoi quindi effettuare il checkout del ramo remoto come un ramo locale.
Le versioni precedenti di Git richiedono la creazione di un nuovo ramo basato su remote
.
Inoltre puoi controllare un nuovo ramo locale e reimpostarlo all’ultimo commit dei rami remoti.
TESTE indipendenti
Ora che abbiamo visto i tre usi principali di git checkout
sui rami, è importante discutere di "detached HEAD”
state. Ricorda che HEAD
è il modo in cui Git fa riferimento all’istantanea corrente. Internamente, git checkout
aggiorna semplicemente il HEAD
in modo che punti al ramo specificato o al commit. Quando punta a un ramo, Git non si lamenta, ma quando esegui il check out di un commit, passa allo stato "detached HEAD”
.
Questo è un avviso che ti dice che tutto ciò che stai facendo è “staccato” dal resto dello sviluppo del tuo progetto. Se se dovessi iniziare a sviluppare una funzione mentre ti trovi in uno stato HEAD
, non ci sarebbe nessun ramo che ti permetta di tornare indietro t o esso. Quando inevitabilmente controlli un altro ramo (ad esempio, per unire la tua funzione in), non ci sarebbe modo di fare riferimento alla tua funzione:
Il punto è, il tuo sviluppo dovrebbe sempre avvenire su un ramo, mai su un HEAD
distaccato. Questo ti assicura di avere sempre un riferimento ai tuoi nuovi commit. Tuttavia, se stai solo guardando un vecchio commit, non importa se ti trovi in uno stato HEAD
distaccato o meno.
Riepilogo
Questa pagina si concentrava sull’utilizzo del comando git checkout
quando si cambiano i rami. Riassumendo, git checkout
, se utilizzato sui rami, altera il target del HEAD
rif. Può essere utilizzato per creare rami, cambiare ramo e controllare rami remoti. Il comando git checkout
è uno strumento essenziale per il funzionamento standard di Git. È una controparte di git merge
. I comandi git checkout
e git merge
sono strumenti fondamentali per abilitare git workflows
.