Git Force Push
Última atualização
Um git push normal é rejeitado quando seu branch local divergiu do remoto - o Git não sobrescreve commits que você talvez não tenha visto. Forçar o push ignora essa verificação e faz o branch remoto coincidir com o seu local. Você precisa disso após reescrever o histórico (um rebase ou amend), mas isso pode apagar commits de outras pessoas, então prefira o mais seguro --force-with-lease.
Experimente isso no terminal playground - um shell real no seu navegador, sem nada para instalar.
Sintaxe
| Command | What it does |
|---|---|
git push --force | Sobrescreve o branch remoto, sem verificação de segurança |
git push -f | Forma abreviada de --force |
git push --force-with-lease | Força somente se ninguém mais fez push nesse meio-tempo |
git push --force-with-lease origin feature | Force push mais seguro para um branch nomeado |
--force vs --force-with-lease
| Behavior | --force | --force-with-lease |
|---|---|---|
| Sobrescreve o remoto | Sempre | Somente se inalterado desde seu último fetch |
| Pode apagar commits de outros | Sim | Recusa, a menos que um fetch tenha renovado o lease |
| Recomendado para times | Não | Sim |
Perguntas frequentes sobre git force push
Quando preciso forçar o push?
Quando você reescreveu um histórico que já está no remoto - após um
git rebase, um git commit --amend ou um rebase interativo que combinou commits. Seu branch local não coincide mais com o histórico do remoto, então um push normal é rejeitado e apenas um force push consegue atualizá-lo.Qual é a diferença entre --force e --force-with-lease?
--force sobrescreve o branch remoto incondicionalmente, o que pode apagar silenciosamente commits que um colega enviou após seu último fetch. --force-with-lease só sobrescreve se o remoto ainda estiver no commit que você viu por último - se outra pessoa fez push nesse meio-tempo, ele recusa, protegendo o trabalho dela. Uma ressalva: qualquer fetch (inclusive o auto-fetch em segundo plano de uma IDE) renova o lease, então faça o push logo depois de conferir o remoto. Ainda assim, prefira-o em vez de --force em qualquer branch compartilhado.Forçar o push é perigoso?
Pode ser. Em um branch compartilhado, um
--force simples pode sobrescrever commits que outros enviaram, apagando de fato o trabalho deles do remoto. É seguro em um branch que só você usa. Na dúvida, use --force-with-lease, que falha com segurança em vez de esmagar alterações não vistas.Como desfaço um force push?
Se você ainda tem os commits antigos localmente ou no
git reflog, pode resetar seu branch de volta para eles e forçar o push novamente para restaurar o estado anterior. Este é mais um motivo para usar --force-with-lease - ele torna sobrescritas acidentais muito menos prováveis já de início.Posso praticar isso online?
Sim. Abra o terminal playground para executar comandos git push em um shell real no seu navegador - sem nada para instalar. O curso interativo e gratuito de Git da Coddy também aborda o trabalho com remotos passo a passo.