Sinossi
git push [<remote> [<refspec>...]] [--force-with-lease] [--tags] [--delete]
Descrizione
Il comando git push invia commit locali a un repository remoto, aggiornando i branch remoti per corrispondere ai tuoi locali. Il primo push di un nuovo branch tipicamente richiede -u per configurare il tracking. Per default, push è non distruttivo: rifiuta di sovrascrivere la storia remota che non hai localmente. Usa --force-with-lease quando hai genuinamente bisogno di riscrivere la storia remota (dopo un rebase) — non usare mai --force nudo su branch condivisi.
Push obbedisce a regole lato server: protezioni dei branch, review obbligatorie, commit firmati e pre-receive hook possono tutti rifiutare un push. Leggi attentamente il messaggio di errore quando questo accade.
Nell'uso quotidiano, git push si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-u, --set-upstream | Imposta upstream per i default futuri di push/pull. |
--force-with-lease | Force push solo se il ref remoto corrisponde all'ultimo valore fetchato. |
--force / -f | Forza la sovrascrittura della storia remota (pericoloso su branch condivisi). |
--tags | Pusha tutti i tag locali. |
--delete | Cancella un branch remoto. |
--dry-run | Mostra cosa verrebbe pushato. |
--all | Pusha tutti i branch. |
--atomic | Aggiornamento all-or-nothing di più ref. |
Esempi
git push -u origin feature/login
# Primo push di un nuovo branch con tracking
git push --force-with-lease
# Alternativa più sicura a --force dopo aver fatto rebase
git push origin --delete old-feature
# Cancella un branch remoto
git push --tags
# Pubblica tutti i tag locali
Errori comuni
Un semplice --force può cancellare i commit dei colleghi. Usa invece --force-with-lease. Pushare a main direttamente bypassa la code review in molti team — configura la protezione del branch. Dimenticare -u significa che i futuri comandi git push hanno bisogno di argomenti espliciti.
Comandi correlati
git fetch, git pull, git remote, git tag