I'configurei um " remoto não-nua; main" repo e clonei-o no meu computador. Eu fiz algumas alterações locais, atualizei meu repositório local e empurrei as alterações de volta para meu repo remoto. As coisas estavam bem até aquele momento.
Agora, eu tinha que mudar alguma coisa no reporte remoto. Depois mudei alguma coisa no meu reporte local. Percebi que a mudança para o reporte remoto não era necessária. Então eu tentei 'empurrar' do meu repo local para o meu repo remoto, mas eu recebi um erro como:
Para evitar que você perca o histórico, as atualizações não urgentes foram rejeitado Fundir as mudanças remotas antes de empurrar novamente. Ver o 'Nota sobre fastforwards' seção de `git push --help' para detalhes.
Eu pensei que provavelmente um
git push --force
forçaria a minha cópia local a empurrar as mudanças para a remota e torná-la igual. **Ele força a atualização***, mas quando eu volto para o repo remoto e faço um commit, eu noto que os arquivos contêm alterações desatualizadas (aquelas que o repo remoto principal tinha anteriormente).
Como mencionei no comentários a uma das respostas:
[Eu] tentei forçar, mas quando voltei ao servidor mestre para salvar as mudanças, fiquei desatualizado na encenação. Assim, quando submeto os repositórios não são a mesma coisa. E quando tento usar o git push novamente, eu recebo o mesmo erro.
Como posso resolver este problema?
Basta fazer:
git push origin <your_branch_name> --force
ou se você tiver um reporte específico:
git push https://git.... --force
Isto irá apagar o(s) seu(s) compromisso(s) anterior(es) e empurrar o(s) seu(s) actual(is).
Pode não ser apropriado, mas se alguém tropeçar nesta página, pensou que poderia querer uma solução simples...
Note também que -f' é a abreviação de
--force', portanto
git push origin <your_branch_name> -f
também vai funcionar.
Primeiro de tudo, eu não faria nenhuma mudança diretamente no "main" repo. Se você realmente quer ter um "main" repo, então você deve apenas empurrar para ele, nunca mudá-lo diretamente.
Quanto ao erro que você está recebendo, você já tentou "puxar" do seu reporte local, e depois "empurrar" para o reporte principal? O que você está fazendo atualmente (se eu entendi bem) é forçar o push e depois perder suas mudanças no "main" repo. Você deve fundir as mudanças localmente primeiro.
Eu realmente recomendaria isso:
empurrar apenas para o reporte principal
certifique-se que o repo principal é um repo nu, a fim de nunca ter qualquer problema com a árvore principal de trabalho do repo não estar em sincronia com sua base `.git'. Veja "Como empurrar um repositório local de git para outro computador?"
Se você tiver que fazer modificações no repo principal (nu), clone-o (no servidor principal), faça sua modificação e volte para ele
Em outras palavras, manter um reporte acessível tanto do servidor principal quanto do computador local, a fim de ter um único reporte upstream de/para o qual puxar/puxar.