Utilização do git push

git push <remote> <branch>

Envie a ramificação especificada para , junto com todos os commits e objetos internos necessários, criando uma ramificação local no repositório de destino. Para evitar que você sobrescreva commits, o Git não permite o envio quando ele resultar em um merge sem avanço rápido 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.

git push <remote> --all

Transmite todas as ramificações locais para o remoto especificado.

git push <remote> --tags

As etiquetas não são enviadas automaticamente quando se faz o push de uma ramificação ou se usa a opção --all. O sinalizador --tags envia todas as etiquetas 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.

Como usar o git push para publicar modificações

O diagrama acima mostra o que acontece quando o mestre local progrede mais que o mestre do repositório central e você publica modificações executando o comando git push origin master. Observe como o git push é quase a mesma coisa que executar o git merge master dentro do repositório remoto.

Git push e sincronização

Comando push para repositórios vazios

Forçar push

O Git evita que você sobrescreva o histórico do repositório central recusando solicitações push quando elas resultam em um merge 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 o merge 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 na cadeia produtiva 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, assegure que seu mestre local está atualizado buscando a cópia do repositório central e fazendo o rebase das modificações por cima dela. O rebase interativo é também uma boa oportunidade de limpar os commits antes de compartilhar. Em seguida, o comando git push envia todos os commits em seu mestre 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 já nos certificamos que o mestre local estava atualizado, o resultado deve ser um merge de avanço rápido e o git push não deve reclamar de nenhum dos itens sem avanço rápido discutidos acima.

Push forçado 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, sem 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 a ramificação remota chamada branch_name. Inserir um nome de ramificação prefixada com dois pontos no comando git push exclui a ramificação remota.