Por que não consigo enviar um commit vazio?


35
  git commit --amend --allow-empty

então

  git push origin master

o idiota 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 isto?

git 

Respostas:


56

O problema não é que você está enviando uma confirmação vazia .
Trata-se de enviar um commit diferente (um com um SHA1 diferente) do que o que já foi enviado.
É isso que git commit --amendfaz: modificou o último commit, não cria um novo.

Isso significa que você está empurrando uma história diferente da que os outros já podem ter clonado.
Se você tiver certeza de que não será um problema, precisará forçar o envio:

git push -f origin master

Você deveria ter feito:

git commit --allow-empty

Você criaria um novo commit (vazio), que poderia ser enviado sem nenhum problema.


5

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

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

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


3

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

Quando você usa

git commit --amend

isso 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 empurrá-lo sem forçar.


0

Verifique se a ramificação remota para a qual você está tentando enviar não está em check-out. Eu criei um repositório git em um dos meus servidores uma vez e não consegui descobrir por que não consegui avançar. Depois de mais ou menos um dia de solução de problemas, descobri que não podia enviar para o repositório (ou a filial que desejava) enquanto ele fazia check-out no repositório do servidor. Então, eu simplesmente criei uma nova ramificação que fiz o checkout quando terminar de fazer alterações no servidor e, em seguida, posso enviar para o servidor. Talvez esse não seja o seu problema, mas eu estava recebendo um erro semelhante a esse quando tive um problema ao enviar para um git vazio no meu servidor.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.