Mudando o histórico
Se for o commit mais recente, você pode simplesmente fazer o seguinte:
git commit --amend
Isso exibe o editor com a última mensagem de confirmação e permite editar a mensagem. (Você pode usar -m
se quiser apagar a mensagem antiga e usar uma nova.)
Empurrando
E então, quando você pressionar, faça o seguinte:
git push --force-with-lease <repository> <branch>
Ou você pode usar "+":
git push <repository> +<branch>
Ou você pode usar --force
:
git push --force <repository> <branch>
Tenha cuidado ao usar esses comandos.
Se alguém empurrou as alterações para o mesmo ramo, você provavelmente evitará destruí-las. A --force-with-lease
opção é a mais segura, porque será cancelada se houver alguma alteração upstream (
Se você não especificar o ramo explicitamente, o Git usará as configurações padrão de envio. Se a configuração padrão de envio for "correspondente", você poderá destruir as alterações em várias ramificações ao mesmo tempo.
Puxar / buscar depois
Qualquer pessoa que já tenha recebido uma mensagem de erro receberá uma atualização e precisará atualizar (assumindo que não está fazendo nenhuma alteração) fazendo algo assim:
git fetch origin
git reset --hard origin/master # Loses local commits
Tenha cuidado ao usar reset --hard
. Se você tiver alterações na ramificação, essas alterações serão destruídas.
Uma observação sobre a modificação do histórico
Os dados destruídos são realmente apenas a mensagem de confirmação antiga, mas --force
não sabem disso e, com prazer, excluirão outros dados também. Então, pense --force
como "Quero destruir dados e sei com certeza que dados estão sendo destruídos". Porém, quando os dados destruídos são confirmados, geralmente é possível recuperar confirmações antigas do reflog - os dados são realmente órfãos em vez de destruídos (embora as confirmações órfãs sejam excluídas periodicamente).
Se você não acha que está destruindo dados, fique longe de --force
... coisas ruins podem acontecer .
É por isso que --force-with-lease
é um pouco mais seguro.