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 upstream
ocorrer 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 development
ramo é 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 --force
mas 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-lease
opçã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-lease
lendo qualquer um dos seguintes:
git push origin --force
funcionou para você?