Ricerca…
introduzione
A differenza di spingere con Git dove le modifiche locali vengono inviate al server del repository centrale, tirare con Git prende il codice corrente sul server e lo "tira" dal server del repository al computer locale. Questo argomento spiega il processo di estrazione del codice da un repository usando Git e le situazioni che si potrebbero incontrare mentre si estrae codice diverso nella copia locale.
Sintassi
- git pull [opzioni [<repository> [<refspec> ...]]
Parametri
parametri | Dettagli |
---|---|
--quiet | Nessun output di testo |
-q | abbreviazione di --quiet |
--verbose | output di testo dettagliato. Passati a recuperare e unire / rebase comandi rispettivamente. |
-v | abbreviazione di --verbose |
--[no-]recurse-submodules[=yes | on-demand | no] | Recupera nuovi commit per i sottomoduli? (Non che questo non sia un pull / checkout) |
Osservazioni
git pull
esegue git fetch
con i parametri specificati e chiama git merge
per unire le branch branch recuperate nel ramo corrente.
Aggiornamento con modifiche locali
Quando sono presenti modifiche locali, il comando git pull
interrompe la segnalazione:
errore: le modifiche locali ai seguenti file verrebbero sovrascritte dall'unione
Per aggiornare (come svn update fatto con subversion), puoi eseguire:
git stash
git pull --rebase
git stash pop
Un modo conveniente potrebbe essere quello di definire un alias usando:
git config --global alias.up '!git stash && git pull --rebase && git stash pop'
git config --global alias.up 'pull --rebase --autostash'
Quindi puoi semplicemente usare:
git up
Pull codice da remoto
git pull
Tirare, sovrascrivere locale
git fetch
git reset --hard origin/master
Attenzione: mentre i commit vengono scartati usando reset --hard
può essere ripristinato usando reflog
e reset
, le modifiche non vincolate vengono cancellate per sempre.
Cambia origin
e master
al remoto e al ramo a cui vuoi forzatamente accedere, rispettivamente, se sono denominati in modo diverso.
Mantenere una storia lineare quando si tira
Ribasare quando si tira
Se stai caricando nuovi commit dal repository remoto e hai modifiche locali sul ramo corrente, git unirà automaticamente la versione remota e la tua versione. Se desideri ridurre il numero di fusioni sul ramo, puoi dire a git di ribilanciare i tuoi commit sulla versione remota del ramo.
git pull --rebase
Rendendolo il comportamento predefinito
Per rendere questo il comportamento predefinito per i rami appena creati, digitare il seguente comando:
git config branch.autosetuprebase always
Per cambiare il comportamento di un ramo esistente, usa questo:
git config branch.BRANCH_NAME.rebase true
E
git pull --no-rebase
Per eseguire un tiro di unione normale.
Controlla se è veloce da inoltrare
Per consentire solo l'inoltro veloce del ramo locale, è possibile utilizzare:
git pull --ff-only
Questo mostrerà un errore quando il ramo locale non è veloce da inoltrare e deve essere rebasato o fuso con upstream.
Pull, "autorizzazione negata"
Alcuni problemi possono verificarsi se la cartella .git
ha un'autorizzazione errata. Risolvere questo problema impostando il proprietario della cartella .git
completa. A volte capita che un altro utente tiri e modifichi i diritti della cartella o dei file .git
.
Per fissare il problema:
chown -R youruser:yourgroup .git/
Estrazione delle modifiche in un repository locale
Semplice tiro
Quando stai lavorando su un repository remoto (ad esempio, GitHub) con qualcun altro, a un certo punto vorresti condividere le tue modifiche con loro. Dopo aver trasferito le modifiche su un repository remoto, è possibile recuperare tali modifiche estraendo da questo repository.
git pull
Lo farà, nella maggior parte dei casi.
Pull da un remoto o ramo diverso
Puoi estrarre le modifiche da un altro telecomando o ramo specificandone i nomi
git pull origin feature-A
Estrae la feature-A
del ramo feature-A
origin
modulo nel tuo ramo locale. Si noti che è possibile fornire direttamente un URL anziché un nome remoto e un nome di oggetto come un SHA di commit anziché il nome di un ramo.
Tiro manuale
Per imitare il comportamento di un git pull, puoi usare git fetch
quindi git merge
git fetch origin # retrieve objects and update refs from origin
git merge origin/feature-A # actually perform the merge
Questo può darti più controllo e ti permette di ispezionare il ramo remoto prima di unirlo. Infatti, dopo aver recuperato, puoi vedere i rami remoti con git branch -a
e controllarli con
git checkout -b local-branch-name origin/feature-A # checkout the remote branch
# inspect the branch, make commits, squash, ammend or whatever
git checkout merging-branches # moving to the destination branch
git merge local-branch-name # performing the merge
Questo può essere molto utile durante l'elaborazione delle richieste di pull.