Você está vendo um recurso de segurança do Git. O Git se recusa a atualizar a ramificação remota com sua ramificação, porque a confirmação principal da ramificação não é um descendente direto da confirmação principal atual da ramificação na qual você está enviando.
Se não fosse esse o caso, duas pessoas que enviariam para o mesmo repositório mais ou menos na mesma hora não saberiam que havia um novo commit entrando ao mesmo tempo e quem empurrou por último perderia o trabalho do empurrador anterior sem nenhum dos dois. eles percebendo isso.
Se você sabe que é a única pessoa que pressiona e deseja enviar por push uma confirmação ou push que confirme a ramificação, você pode 'forçar' o Git a atualizar a ramificação remota usando o -f
switch.
git push -f origin master
Mesmo isso pode não funcionar, pois o Git permite que repositórios remotos recusem push não avançados no extremo remoto usando a variável de configuração receive.denynonfastforwards
. Se for esse o caso, o motivo da rejeição será semelhante a este (observe a parte 'rejeitada remotamente'):
! [remote rejected] master -> master (non-fast forward)
Para contornar isso, é necessário alterar a configuração do repositório remoto ou, como um hack sujo, você pode excluir e recriar a ramificação da seguinte maneira:
git push origin :master
git push origin master
Em geral, o último parâmetro a git push
usar o formato <local_ref>:<remote_ref>
, onde local_ref
é o nome da ramificação no repositório local e remote_ref
é o nome da ramificação no repositório remoto. Este par de comandos usa duas atalhos. :master
possui um local_ref nulo, o que significa enviar uma ramificação nula para o lado remoto master
, ou seja, excluir a ramificação remota. Um nome de filial sem :
meios significa enviar a filial local com o nome fornecido para a filial remota com o mesmo nome. master
nesta situação é a abreviação de master:master
.