Git push
O comando git push
é usado para enviar o conteúdo do repositório local para um repositório remoto. O comando push transfere commits do repositório local a um repositório remoto. É o oposto de git fetch, que importa commits para ramificações locais, enquanto o comando push exporta commits para ramificações remotas. As ramificações remotas são configuradas usando o comando git remote. O comando push tem o potencial de sobrescrever modificações e, assim, deve ser usado com cuidado. Esses itens são discutidos abaixo.
Utilização do git push
git push <remote> <branch>
Envia a ramificação especificada junto com todos os commits e objetos internos necessários. Isso cria uma ramificação local no repositório de destino. Para evitar que você sobrescreva os commits, o Git não permite que você envie push quando isso resultar em uma mesclagem não rápida no repositório de destino.
git push <remote> --force
Igual ao comando anterior, mas força a transmissão push mesmo que resulte em um merge sem avanço rápido. Não use o sinalizador --force
a menos que tenha absoluta certeza do que está fazendo.
Transmite todas as ramificações locais para o remoto especificado.
git push <remote> --tags
Material relacionado
Log avançado do Git
VER SOLUÇÃO
Aprenda a usar o Git com o Bitbucket Cloud
O envio dos marcadores não é automático quando se faz o push de uma ramificação ou se usa a opção --all
. O sinalizador --tags
envia todos os marcadores locais para o repositório remoto.
Discussão sobre o git push
O comando git push
é mais usado para publicar modificações locais a um repositório central. Após um repositório local ter sido modificado, um comando push é executado para compartilhar as modificações com membros da equipe remota.
O diagrama acima mostra o que acontece quando a ramificação principal
local progride mais que a principal
do repositório central e você publica modificações com a execução do comando git push origin main
. Observe como a execução do git push
é quase a mesma coisa que o git merge main
de dentro do repositório remoto.
Git push e sincronização
O git push
é um dos muitos componentes usados no processo geral de "sincronização" do Git. Os comandos de sincronização operam em ramificações remotas que são configuradas usando o comando git remote. O git push
pode ser considerado um comando de "upload", enquanto git fetch e git pull podem ser considerados comandos de "download". Assim que os conjuntos de alterações tiverem sido movidos por meio de um download ou upload, um git merge pode ser feito no destino para integrar as alterações.
Comando push para repositórios vazios
Uma prática Git frequente e moderna é ter um repositório --bare
de hospedagem remota agindo como repositório de origem central. Esse repositório de origem é, em geral, hospedado fora do local por um host confiável de terceiros, como o Bitbucket. Como o comando push interfere na estrutura de ramificações remotas, é mais seguro e comum fazer o push para repositórios criados com a marcação --bare
. Os repositórios vazios não têm um diretório de trabalho, então o comando push não vai alterar nenhum conteúdo do diretório de trabalho em progresso. Para mais informações sobre a criação de repositórios vazios, leia sobre o git init.
Forçar push
O Git evita que você sobrescreva o histórico do repositório central recusando solicitações push quando elas resultam em uma mesclagem sem avanço rápido. Assim, se o histórico remoto for diferente do seu, você precisa fazer o pull da ramificação remota e a mesclagem com a ramificação local e, em seguida, tentar fazer o push de novo. É um processo semelhante ao do SVN para sincronizar com o repositório central via svn update
antes de fazer o commit de um conjunto de alterações.
O sinalizador --force
substitui esse comportamento e faz com que a ramificação do repositório remoto corresponda ao repositório local, excluindo qualquer modificação upstream que possa ter ocorrido desde a última vez que você usou o comando pull. O único momento em que você talvez precise forçar um push é quando perceber que os commits que acabou de compartilhar não estavam muito corretos e foram corrigidos com um git commit --amend
ou com rebase interativo. No entanto, é preciso ter certeza absoluta de que nenhum de seus colegas de equipe fez o pull desses commits antes de usar a opção --force
.
Exemplos
Git push padrão
O exemplo a seguir descreve um dos métodos padrão para publicar contribuições locais no repositório central. Primeiro, é feita a verificação de que a ramificação principal local está atualizada com a busca da cópia do repositório central e com o rebase das alterações nela. O rebase interativo é também uma boa oportunidade de limpar os commits antes de os compartilhar. Em seguida, o comando git push
envia todos os commits da ramificação principal local para o repositório central.
git checkout main
git fetch origin main
git rebase -i origin/main
# Squash commits, fix up commit messages etc.
git push origin main
Como a gente já verificou que a ramificação principal local estava atualizada, vai ocorrer um merge de avanço rápido e o git push
não vai reclamar de nenhum dos itens sem avanço rápido discutidos acima.
Push forçado corrigido
O comando git commit aceita uma opção --amend
, que vai atualizar o commit anterior. Muitas vezes, o commit é corrigido para atualizar a mensagem de commit ou adicionar novas modificações. Assim que o commit é corrigido, o comando git push
não vai funcionar porque o Git vai enxergar o commit corrigido e o commit remoto como conteúdo divergente. A opção --force
deve ser usada para enviar um commit corrigido.
# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main
O exemplo acima pressupõe que está sendo executado em um repositório existente com um histórico de commits. O git commit --amend
é usado para atualizar o commit anterior e, em seguida, fazer o push forçado usando a opção--force
.
Exclusão de uma ramificação ou etiqueta remota
Às vezes, as ramificações precisam ser apagadas por motivos organizacionais ou de registro. Para excluir toda uma ramificação, ela deve ser excluída local e remotamente.
git branch -D branch_name
git push origin :branch_name
O comando acima vai excluir o branch remoto chamado branch_name. Inserir um nome de branch prefixado com dois pontos no comando git push
exclui o branch remoto.
Compartilhar este artigo
Próximo tópico
Leitura recomendada
Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.