Pourquoi ne puis-je pas pousser un commit vide?

35
  git commit --amend --allow-empty

puis

  git push origin master

le git a dit 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.

Pourquoi? Comment régler ceci?


la source

Réponses:

56

Le problème n'est pas que vous poussez un commit vide .
Il s’agit de pousser un commit différent (un avec un SHA1 différent) de celui qui a déjà été poussé.
C'est ce qui git commit --amendfait: il a modifié le dernier commit, il n'en crée pas un nouveau.

Cela signifie que vous créez une histoire différente de celle que d'autres ont peut-être déjà clonée.
Si vous êtes sûr que cela ne posera pas de problème, vous devez forcer le push:

git push -f origin master

Si vous avez fait:

git commit --allow-empty

Vous auriez créé un nouveau commit (vide) que vous auriez pu pousser sans problème.

VonC
la source
5

Si vous voulez créer une demande de tir sur Github. Vous pouvez:

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

Créez ensuite une demande d'extraction sans changement.

1Rhino
la source
3

Pour clarifier la réponse acceptée, car je n'ai pas assez de réputation pour commenter:

Quand vous utilisez

git commit --amend

il ne crée un nouveau commit. Cependant, il ne l'ajoute pas au commit en cours, il l'ajoute au parent du commit en cours. Visuellement, cela ressemblerait à une fourchette.

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

Git interprète cela comme une divergence par rapport à la télécommande. C'est pourquoi il ne vous laissera pas le pousser sans forcer.

Dustin
la source
0

Assurez-vous que la branche distante vers laquelle vous essayez de pousser n’est pas extraite. Une fois, j'ai créé un référentiel git sur l'un de mes serveurs et je ne pouvais pas comprendre pourquoi je ne pouvais pas y accéder. Après environ une journée de dépannage, j'ai découvert que je ne pouvais pas accéder au référentiel (ou à la branche que je voulais) tant qu'il a été extrait sur le référentiel du serveur. Donc, j'ai simplement créé une nouvelle branche que j'ai empruntée une fois les modifications apportées sur le serveur terminées. Je peux ensuite envoyer des messages au serveur. Ce n'est peut-être pas votre problème, mais je recevais une erreur similaire à celle-ci lorsque je rencontrais un problème qui poussait un git vide sur mon serveur.

Praven
la source