git pull è un comando Git usato per aggiornare la versione locale di un repository dal remoto.

È uno dei quattro comandi che causa una interazione via internet con Git. Come default, git pull fa due cose.

  1. Aggiorna l'attuale branch di lavoro locale (il branch su cui ti trovi)
  2. Aggiorna i branch di tracciamento remoto per tutti gli altri branch.

git pull è equivalente all'uso di git fetch seguito da git merge: prende le informazioni dei nuovi commit, e li applica al branch locale.

La sintassi di questo comando è la seguente:

# General format
git pull OPTIONS REPOSITORY REFSPEC

# Pull from specific branch
git pull REMOTE-NAME BRANCH-NAME

in cui:

  • OPTIONS sono le opzioni del comando, quali --quiet o --verbose. Puoi leggere di più sulle diverse opzioni nella documentazione di Git
  • REPOSITORY è l'URL del tuo repo. Esempio: https://github.com/freeCodeCamp/freeCodeCamp.git
  • REFSPEC specifica quali riferimenti prendere e quali riferimenti locali aggiornare
  • REMOTE-NAME è il nome del tuo repository remoto. Per esempio: origin.
  • BRANCH-NAME è il nome del tuo branch. Per esempio develop.

Nota

Se hai apportato dei cambiamenti e non li hai salvati in un commit, la parte merge del tuo comando git pull fallirà e il tuo branch locale non cambierà.

Quindi, dovresti sempre salvare i tuoi cambiamenti in un branch prima di fare il pull dei nuovi commit da un repository remoto.

Tavola dei contenuti

Usare git pull

Usa git pull per aggiornare un repository locale tramite il repository remoto corrispondente. Esempio: mentre lavori localmente su main, esegui git pull per aggiornare la copia locale di main e aggiornare gli altri branch di tracciamento remoto. (Più informazioni sui branch di tracciamento remoto nella prossima sezione.)

Ci sono alcune cose da tenere in mente perché questo esempio possa essere vero:

Il repository locale deve avere un repository remoto collegato

  • Verificalo eseguendo git remote -v
  • Se ci sono repository remoti multipli, git pull potrebbe non fornire informazioni sufficienti. Potresti aver bisogno di specificare git pull origin o git pull upstream.

Il branch su cui sei deve avere un branch di tracciamento remoto corrispondente

  • Verificalo eseguendo git status. Se non c'è un branch di tracciamento remoto, Git non sa da dove fare il pull.
ADVERTISEMENT

Controllo di versione distribuito

Git è un sistema di controllo di versione distribuito. Con questi sistemi, gli sviluppatori possono lavorare sullo stesso file allo stesso tempo in ambienti separati. Dopo aver fatto il push del codice al repository remoto, altri sviluppatori possono fare il pull del codice cambiato.

Interazioni sul Network in Git

Ci sono solo quattro comandi che causano interazioni tramite network su Git. Un repository locale non ha alcuna consapevolezza di cambiamenti fatti sul repository remoto, fino a che non c'è una richiesta di informazioni, e un repository remoto non ha alcuna consapevolezza dei cambiamenti locali fino a che i commit non vengono mandati al remoto con push.

I quattro comandi network sono:

  • git clone
  • git fetch
  • git pull
  • git push

I branch in un sistema di controllo di versione distribuito

Quando lavori con Git, può sembrare che ci siano molte copie dello stesso codice in giro. Ci sono differenti versioni dello stesso file su ogni branch e diverse copie degli stessi branch sul computer di ogni sviluppatore e sul remoto. Per tenere traccia di tutto questo, Git usa branch di tracciamento remoto.

Se esegui git branch --all all'interno di un repository Git, i branch di tracciamento remoto appaiono in rosso. Queste sono copie di sola lettura del codice come appare in remoto. (Quando c'è stata l'ultima interazione network che ha portato le informazioni localmente? Ricorda quando questa informazione è stata aggiornata l'ultima volta. L'informazione nei branch di tracciamento remoto riflette le informazioni da quella interazione.)

Con i branch di tracciamento remoto puoi lavorare in Git su branch diversi senza interazioni network. Ogni volta che esegui i comandi git pull o git fetch, aggiorni i branch di tracciamento remoto.

ADVERTISEMENT

git fetch + git merge

git pull è un comando combinato, equivalente a git fetch + git merge.

git fetch

Da solo, git fetch aggiorna tutti i branch di tracciamento remoto nel repository locale. Nessun cambiamento si riflette su nessuno dei branch di lavoro locali.

git merge

Senza nessun argomento, git merge unisce il branch di tracciamento remoto al branch di lavoro locale.

ADVERTISEMENT

git pull

git fetch aggiorna i branch di tracciamento remoto, git merge aggiorna il branch locale con il corrispondente branch di tracciamento remoto. Usando git pull, ottieni entrambe le parti di questi aggiornamenti. Ma questo significa che se sei su un branch secondario e esegui git pull, quando torni sul branch principale, qualsiasi nuovo aggiornamento non sarà incluso. Ogni volta che ti sposti su un altro branch che potrebbe avere nuovi cambiamenti, è sempre una buona idea eseguire git pull.

git pull in un IDE

Il linguaggio comune in altri IDE potrebbe non includere la parola pull. Se cerchi le parole git pull ma non le vedi, prova a cercare la parola sync.

fare il fetch di un PR remoto ad un repo locale

Per revisionare le PR (Pull Request) potresti volerle portare in locale. Per farlo, puoi usare il comando git fetch come segue:

git fetch origin pull/ID/head:BRANCHNAME

ID è l'id della pull request e BRANCHNAME è il nome del branch che vuoi creare. Una volta che hai creato il branch puoi usare git checkout per muoverti su quel branch.