Close

git push

Il comando git push viene utilizzato per caricare i contenuti di un repository locale su uno remoto. I commit vengono trasferiti dal repository locale a uno remoto tramite push. È l'equivalente di git fetch, ma mentre tramite l'azione di recupero i commit vengono importati nei branch locali, con il push i commit vengono esportati nei branch remoti. I branch remoti vengono configurati tramite il comando git remote. L'operazione di push può sovrascrivere le modifiche, pertanto presta attenzione mentre la esegui. Questi problemi sono descritti di seguito.


Uso di git push


git push <remote> <branch>

Esegue il push del branch specificato , insieme a tutti i commit e agli oggetti interni necessari. Ciò crea un branch locale nel repository di destinazione. Per impedire la sovrascrittura dei commit, Git non consente di eseguire il push quando risulta in un merge senza avanzamento rapido nel repository di destinazione.

git push <remote> --force

Uguale al comando descritto sopra, ma forza il push anche se risulta in un merge senza avanzamento rapido. Non utilizzare il flag --force a meno che tu non sia assolutamente sicuro di come procedere.

Esegue il push di tutti i branch locali sul repository remoto specificato.

git push <remote> --tags
Finestra della console
materiale correlato

Registro Git avanzato

Logo di Bitbucket
Scopri la soluzione

Impara a utilizzare Git con Bitbucket Cloud

Non effettua il push automatico dei tag quando esegui il push di un branch o utilizzi l'opzione --all. Il flag --tags invia tutti i tag locali al repository remoto.

Discussione su git push


git push è utilizzato perlopiù per pubblicare e caricare le modifiche locali su un repository centrale. In seguito alla modifica di un repository locale, viene eseguito un push per condividere tali modifiche con i membri del team remoti.

Utilizzo di git push per pubblicare le modifiche

Il diagramma riportato sopra illustra quello che succede quando il main locale ha superato il master del repository centrale e tu pubblichi delle modifiche eseguendo git push origin main. Osserva come eseguire git push corrisponde essenzialmente a eseguire git merge main dall'interno del repository remoto.

Git push e sincronizzazione


git push è uno dei tanti componenti utilizzati nel processo di "sincronizzazione" Git generale. I comandi di sincronizzazione operano sui branch remoti configurati tramite il comando git remote. git push può essere considerato come un comando per il caricamento, mentre si può pensare a git fetch e a git pull come a dei comandi per il download. Una volta che i set di modifiche sono stati trasferiti tramite caricamento o download, è possibile eseguire il comando git merge sulla destinazione per integrare le modifiche.

Esecuzione del push sui repository bare


Una pratica Git recente e utilizzata di frequente è quella di impostare un repository --bare ospitato in remoto come repository di origine centrale. Questo repository di origine è spesso ospitato off-site tramite una terza parte attendibile come Bitbucket. Dal momento che il push crea problemi nella struttura del branch remoto, è più sicuro e più frequente eseguire il push sui repository creati con il flag --bare. I repository bare non dispongono di directory di lavoro e pertanto il push non altererà i contenuti delle directory di lavoro in corso. Per ulteriori informazioni sulla creazione di un repository bare, leggi la sezione dedicata a git init.

Come forzare il push


Git impedisce la sovrascrittura della cronologia del repository centrale rifiutando le richieste di push che risulterebbero in un merge senza avanzamento rapido. Quindi, se la cronologia remota è diversa da quella locale, è necessario eseguire un pull del branch remoto ed effettuarne il merge con quello locale e quindi provare a ripetere il push. Questa operazione è simile alla sincronizzazione necessaria in SVN con il repository centrale, tramite il comando svn update, prima di eseguire il commit di un set di modifiche.

Il flag --force ignora questo comportamento e fa in modo che il branch del repository remoto corrisponda a quello locale, eliminando eventuali modifiche upstream apportate dall'ultimo pull. L'unico caso in cui potrebbe essere necessario forzare il push è se ti accorgi che i commit appena condivisi non sono corretti e li correggi con un comando git commit --amend o con una riassegnazione interattiva. Tuttavia, devi avere la certezza assoluta che nessuno degli altri membri del team abbia eseguito un pull di tali commit prima di utilizzare l'opzione --force.

Esempi


Comando git push predefinito

L'esempio seguente descrive uno dei metodi standard per la pubblicazione dei contributi locali sul repository centrale. Innanzitutto, verifica che il main locale sia aggiornato recuperando la copia del repository centrale e riassegnando le modifiche. La riassegnazione interattiva è inoltre una buona opportunità per effettuare la pulizia dei commit prima di condividerli. Quindi, il comando git push invia tutti i commit sul main locale al repository centrale.

git checkout main
git fetch origin main
git rebase -i origin/main
# Squash commits, fix up commit messages etc.
git push origin main

Dal momento che abbiamo già verificato che il main locale fosse aggiornato, questa operazione dovrebbe tradursi in un merge con avanzamento rapido e git push non dovrebbe restituire errori sui problemi legati ai merge senza avanzamento rapido descritti sopra.

Push forzato corretto

Il comando git commit accetta l'opzione --amend che consente di aggiornare il commit precedente. Un commit viene corretto spesso per aggiornarne il messaggio o per aggiungere nuove modifiche. Quando un commit viene corretto, il comando git push non riesce perché Git vedrà il commit corretto e quello remoto con contenuti diversi. Per eseguire il push di un commit corretto, occorre utilizzare l'opzione --force.

# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main

Nell'esempio precedente si presuppone che il comando venga eseguito su un repository esistente con una cronologia di commit. Il comando git commit --amend viene utilizzato per aggiornare il commit precedente e viene quindi forzato il push del commit corretto tramite l'opzione --force.

Eliminazione di un tag o di un branch remoto

Alcune volte, per scopi organizzativi o di contabilità, occorre eseguire la pulizia dei branch. Per eliminare completamente un branch, occorre eliminarlo in locale e in remoto.

git branch -D branch_name
git push origin :branch_name

Quanto illustrato sopra elimina il branch remoto denominato branch_name. L'invio di un nome di branch con due punti come prefisso al comando git push consente di eliminare il branch remoto.


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.

Le persone collaborano utilizzando una parete piena di strumenti

Blog di Bitbucket

Illustrazione su Devops

Percorso di apprendimento DevOps

Funzione Demo Den per demo con esperti Atlassian

Come Bitbucket Cloud funziona con Atlassian Open DevOps

Iscriviti alla nostra newsletter DevOps

Thank you for signing up