git push
Nesta página você encontra informações sobre o comando git push, sua sintaxe, as opções mais comuns e dicas importantes sobre ele.
Esta página explica o que o git push faz, a sintaxe e as opções mais úteis, como o envio funciona em repositórios bare e non-bare, como definir um branch upstream, como forçar um push com segurança e como deletar um branch remoto. Os exemplos utilizam comandos e saídas Git reais para que você possa acompanhar.
Definição
O comando git push envia commits do seu repositório local para um repositório remoto. O push é o oposto do fetch: enquanto o git fetch importa commits para seus branches de rastreamento locais, o git push exporta seus commits locais para os branches remotos para que os colaboradores possam vê-los.
A sintaxe básica é:
git push <remote> <branch><remote> é o nome do repositório remoto (mais comumente origin), e <branch> é o branch local cujos commits você deseja publicar.
Uso do git push
O comando git push é comumente usado para publicar alterações locais em um repositório central. Após confirmar as alterações localmente, você executa git push para compartilhá-las com o restante da equipe. É um dos comandos envolvidos no fluxo de trabalho de sincronização. Esses comandos operam nos branches remotos configurados com o comando git remote: os commits são enviados com git push e baixados com git fetch e git pull. Após o download, o git merge integra as alterações ao seu branch de trabalho.
Um push bem-sucedido imprime um resumo do que foi transferido. Por exemplo, enviar dois novos commits para master tem esta aparência:
$ git push origin master
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Writing objects: 100% (6/6), 612 bytes | 612.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:example/repo.git
a1b2c3d..e4f5g6h master -> masterA linha a1b2c3d..e4f5g6h master -> master confirma quais commits foram movidos e que seu master local agora corresponde ao master remoto.
O diagrama a seguir mostra a progressão do master local além do master do repositório central, e a publicação dessas alterações ao invocar git push origin master.

Opções comuns
git push <remote> <branch> | Envia o branch especificado para <remote> com os commits necessários, criando um branch remoto no repositório de destino. |
|---|---|
git push <remote> --force | Força o push mesmo que resulte em uma atualização non-fast-forward. Certifique-se de que ninguém tenha feito pull dos commits antes de usar a opção --force. |
git push <remote> --all | Envia todos os branches locais para o repositório remoto. |
git push <remote> --tags | Envia as tags dos branches locais para o repositório remoto. A opção --all não envia as tags. |
git push -u <remote> <branch> | Envia o branch e o registra como o branch upstream (de rastreamento), para que futuros git push e git pull possam ser executados sem argumentos. |
git push <remote> --force-with-lease | Força o push somente se o branch remoto não foi alterado desde seu último fetch — uma alternativa mais segura ao --force. |
git push <remote> --dry-run | Mostra o que seria enviado sem enviar nada ao repositório remoto. |
Como fazer push para repositórios bare
Um repositório bare é aquele criado com a flag --bare (git init --bare ou git clone --bare). Ele não possui diretório de trabalho, portanto ninguém pode editar arquivos ou fazer commits diretamente nele. Isso o torna seguro para receber pushes, razão pela qual repositórios centrais/compartilhados (hospedados em um servidor ou serviço como GitHub) são bare. Fazer push para um repositório non-bare cujo branch de trabalho está com checkout pode conflitar com a árvore de trabalho desse branch, por isso o Git recusa esses pushes por padrão.
# create a shared central repository
git init --bare central.gitO que acontece quando um push é rejeitado
O Git recusa seu push quando o branch remoto contém commits que você não possui localmente — uma atualização non-fast-forward. Isso geralmente significa que um colega de equipe fez push antes. O erro tem esta aparência:
$ git push origin master
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'github.com:example/repo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.A solução é incorporar o trabalho remoto primeiro e depois fazer push novamente:
git pull origin master # fetch + merge (or use --rebase)
git push origin masterUse --force apenas quando você deliberadamente quiser sobrescrever o histórico remoto (veja abaixo) — não para contornar essa verificação de segurança em branches compartilhados.
Force push
A flag --force sobrescreve o branch remoto com o seu local, descartando quaisquer commits upstream que não foram baixados. Use-a apenas quando você intencionalmente reescreveu o histórico — por exemplo, após git commit --amend ou um git rebase interativo — e tem certeza de que mais ninguém construiu sobre os commits que está substituindo. Quando um commit é alterado ou rebaseado, seu hash muda, então o Git o trata e o commit remoto como conteúdo divergido e rejeita um push normal; --force é necessário para publicar o commit reescrito.
Para branches compartilhados, prefira --force-with-lease (abordado abaixo): ele recusa sobrescrever o trabalho que o remoto recebeu após seu último fetch, evitando que você destrua silenciosamente os commits de um colega.
git push --force
# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin masterComo deletar um branch remoto
Aqui está um exemplo de como deletar o branch remoto. O branch_name prefixado com dois pontos no git push irá deletar o branch remoto:
delete remote branch, git push
git branch -D branch_name
git push origin :branch_nameO comando git push origin :branch_name deleta o branch especificado (branch_name) do repositório remoto (origin) ao enviar uma referência vazia para ele.
Como funciona
git push: envia alterações do seu repositório Git local para um repositório remotoorigin: o nome do repositório remoto:branch_name: um refspec que representa uma referência vazia, efetivamente deletando o branch especificado do repositório remoto
Portanto, quando você executa git push origin :branch_name, o Git irá deletar o branch branch_name do repositório remoto origin.
Observe que esse comando pode ser perigoso se usado incorretamente, pois irá deletar o branch sem nenhuma confirmação ou possibilidade de recuperação. Certifique-se de verificar duas vezes o nome do branch e de que realmente deseja deletá-lo antes de executar o comando.
Use a flag -u no primeiro push de um branch
Quando você tem um branch local e deseja enviá-lo ao repositório remoto pela primeira vez, deve especificar qual branch do repositório remoto você deseja usar. No Git, a flag -u é usada com o comando git push para definir o branch upstream para o branch atual. Ao usar a flag -u, o Git criará um vínculo entre seu branch local e o branch remoto. Esse vínculo é útil para simplificar os comandos git pull e git push no futuro, pois permite que o Git lembre qual branch remoto corresponde ao seu branch local.
A flag -u é uma abreviação de --set-upstream. Ao usar essa flag, você normalmente a verá usada assim:
Use a flag -u no primeiro push de um branch
git push -u origin your-branch-nameApós isso, seu branch local rastreia origin/your-branch-name. A partir daí, você pode executar git push e git pull sem argumentos extras enquanto estiver nesse branch, e o git status informará o quanto você está à frente ou atrás do remoto. Consulte git branch para mais informações sobre branches locais e de rastreamento remoto.
Exemplos de flags mais usadas
Aqui estão exemplos rápidos das flags mais úteis do git push.
-f (force)
git push -f origin masterForça o push do branch master local para origin, sobrescrevendo quaisquer commits no master remoto que você não possui localmente. -f é a forma curta de --force. Use com cuidado — pode apagar commits que outras pessoas enviaram se estiverem trabalhando no mesmo branch.
--tags
git push origin --tagsEnvia todas as suas tags locais para origin. As tags marcam pontos importantes no histórico, como lançamentos ou marcos. Um git push normal não transfere tags, então essa flag (ou enviar uma tag específica com git push origin <tagname>) é como você as publica. Consulte git tag para mais informações sobre como criar tags.
--all
git push origin --allEnvia todos os branches locais para origin em um único comando. Observe que --all não inclui tags — combine-o com um push separado de --tags se precisar de ambos.
--dry-run
git push --dry-run origin masterSimula o push e reporta o que seria enviado, sem transferir nada. Útil para confirmar exatamente quais commits e refs um push irá atualizar antes de executá-lo de verdade.
--force-with-lease
git push --force-with-lease origin masterForça o push de master para origin somente se o branch remoto ainda apontar para onde estava na última vez que você fez fetch. Se alguém tiver feito push enquanto isso, o comando aborta em vez de sobrescrever o trabalho dessa pessoa. Esta é a alternativa mais segura ao -f/--force.