Por que não posso enviar um commit vazio?

33
  git commit --amend --allow-empty

então

  git push origin master

o git disse que

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'remoteurl'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Por quê? Como consertar isso?

    
por Kim 28.08.2011 / 09:48

4 respostas

55

O problema não é que você esteja enviando um commit empty .
Trata-se de enviar um commit diferente (um com um SHA1 diferente) do que o commit já enviado.
Isso é o que o git commit --amend faz: modificou o último commit, não cria um novo.

Isso significa que você está empurrando uma história diferente do que a outra já clonada.
Se tiver certeza de que não será um problema, você precisa forçar o envio:

git push -f origin master

Você deveria ter feito:

git commit --allow-empty

Você teria criado um commit novo (vazio), que você poderia ter empurrado sem nenhum problema.

    
por 28.08.2011 / 11:51
3

Se você deseja criar uma solicitação pull no Github. Você pode:

git commit --allow-empty -m "make pull request"

Em seguida, crie uma solicitação pull sem alteração.

    
por 26.03.2015 / 07:57
2

Para esclarecer a resposta aceita, já que não tenho reputação suficiente para comentar:

Quando você usa

git commit --amend

faz criar um novo commit. No entanto, ele não o anexa ao commit atual, ele o anexa ao pai do commit atual. Visualmente, pareceria um garfo.

  O (old commit)
 /
O-O (amended commit)

O Git interpreta isso como uma divergência do controle remoto. É por isso que não permite que você o force sem forçar.

    
por 21.08.2018 / 02:05
0

Verifique se a ramificação remota que você está tentando enviar não está com check-out. Eu fiz um repositório git em um dos meus servidores uma vez e não conseguia descobrir por que eu não poderia insistir nisso. Depois de um dia ou mais de solução de problemas, descobri que não era possível enviar para o repositório (ou o ramo que eu queria) enquanto estava com check-out no repositório do servidor. Então, eu simplesmente criei uma nova ramificação que eu finalizo quando termino de fazer alterações no servidor, e então posso enviar para o servidor. Isso pode não ser o seu problema, mas eu estava recebendo um erro semelhante a este quando tive um problema ao empurrar para um git vazio no meu servidor.

    
por 01.08.2014 / 18:07

Tags