Você deve poder forçar sua revisão local ao repositório remoto usando
git push -f <remote> <branch>
(por exemplo git push -f origin master). Sair <remote>e <branch>forçará o envio de todos os ramos locais que foram definidos --set-upstream.
Apenas esteja avisado, se outras pessoas estiverem compartilhando este repositório, o histórico de revisões entrará em conflito com o novo. E se eles tiverem confirmações locais após o ponto de mudança, elas se tornarão inválidas.
Atualização : Pensei em acrescentar uma nota lateral. Se você estiver criando alterações que outros revisarão, não é incomum criar uma ramificação com essas alterações e fazer uma nova reformulação periódica para mantê-las atualizadas com a ramificação principal de desenvolvimento. Deixe que outros desenvolvedores saibam que isso acontecerá periodicamente para que eles saibam o que esperar.
Atualização 2 : devido ao número crescente de espectadores, gostaria de adicionar algumas informações adicionais sobre o que fazer quando upstreamocorrer um impulso de força.
Digamos que eu tenha clonado seu repositório e adicionamos alguns commits dessa forma:
D ---- E tópico
/
Desenvolvimento A ---- B ---- C
Porém, mais tarde, o developmentramo é atingido com a rebase, o que fará com que eu receba um erro assim quando executar git pull:
Desempacotando objetos: 100% (3/3), pronto.
De <repo-location>
* desenvolvimento da filial -> FETCH_HEAD
Mesclagem automática de <files>
CONFLITO (conteúdo): Mesclar conflito em <locations>
Falha na mesclagem automática; conserte conflitos e depois confirme o resultado.
Aqui eu poderia resolver os conflitos e commit, mas isso me deixaria com uma história de submissão realmente feia:
C ---- D ---- E ---- F tópico
/ /
A ---- B -------------- C 'desenvolvimento
Pode parecer atraente de usar, git pull --forcemas tenha cuidado, pois isso deixará você com confirmações ociosas:
D ---- E tópico
A ---- B ---- C 'desenvolvimento
Então provavelmente a melhor opção é fazer a git pull --rebase. Isso exigirá que eu resolva conflitos como antes, mas para cada etapa, em vez de confirmar, eu usarei git rebase --continue. No final, o histórico de consolidação ficará muito melhor:
Tópico D '--- E'
/
A ---- B ---- C 'desenvolvimento
Atualização 3: Você também pode usar a --force-with-leaseopção como um impulso de força "mais seguro", conforme mencionado por Cupcake em sua resposta :
O envio forçado com uma "concessão" permite que o envio forçado falhe se houver novas confirmações no controle remoto que você não esperava (tecnicamente, se você ainda não as tiver buscado no ramo de rastreamento remoto), o que é útil se você não deseja substituir acidentalmente os commits de outra pessoa que você ainda não conhecia e apenas deseja substituir o seu:
git push <remote> <branch> --force-with-lease
Você pode aprender mais detalhes sobre como usar --force-with-leaselendo qualquer um dos seguintes:
git push origin --forcefuncionou para você?