Git Force Push
Ultimo aggiornamento
Un normale git push viene rifiutato quando il tuo branch locale si è allontanato da quello remoto: Git non sovrascrive commit che potresti non aver visto. Il force push scavalca questo controllo e fa coincidere il branch remoto con quello locale. Ti serve dopo aver riscritto la cronologia (un rebase o un amend), ma può cancellare i commit di altre persone, quindi preferisci il più sicuro --force-with-lease.
Prova questi comandi nel terminal playground: una vera shell nel tuo browser, senza installare nulla.
Sintassi
| Comando | Cosa fa |
|---|---|
git push --force | Sovrascrive il branch remoto, senza controlli di sicurezza |
git push -f | Forma breve di --force |
git push --force-with-lease | Forza solo se nel frattempo nessun altro ha fatto push |
git push --force-with-lease origin feature | Force push più sicuro su un branch specifico |
--force vs --force-with-lease
| Comportamento | --force | --force-with-lease |
|---|---|---|
| Sovrascrive il remote | Sempre | Solo se non è cambiato dal tuo ultimo fetch |
| Può cancellare i commit altrui | Sì | Si rifiuta, a meno che un fetch non abbia aggiornato il lease |
| Consigliato per i team | No | Sì |
Domande frequenti su git force push
Quando devo fare un force push?
git rebase, un git commit --amend o un rebase interattivo che ha unito dei commit con squash. Il tuo branch locale non corrisponde più alla cronologia del remote, quindi un push normale viene rifiutato e solo un force push può aggiornarlo.Che differenza c'è tra --force e --force-with-lease?
--force sovrascrive il branch remoto senza condizioni, e può cancellare in silenzio commit che un collega ha inviato dopo il tuo ultimo fetch. --force-with-lease sovrascrive solo se il remote è ancora al commit che hai visto per ultimo: se nel frattempo qualcun altro ha fatto push, si rifiuta e protegge il suo lavoro. Un'avvertenza: qualsiasi fetch (anche il fetch automatico in background di un IDE) aggiorna il lease, quindi fai il push subito dopo aver controllato il remote. Resta comunque preferibile a --force su qualsiasi branch condiviso.Il force push è pericoloso?
--force può sovrascrivere commit inviati da altri, cancellando di fatto il loro lavoro dal remote. È sicuro su un branch che usi solo tu. Nel dubbio, usa --force-with-lease, che fallisce in modo sicuro invece di distruggere modifiche che non hai visto.Come annullo un force push?
git reflog, puoi riportare il branch su di essi e fare di nuovo il force push per ripristinare lo stato precedente. È un motivo in più per usare --force-with-lease: rende molto meno probabili le sovrascritture accidentali fin dall'inizio.