Vous voyez une fonctionnalité de sécurité Git. Git refuse de mettre à jour la branche distante avec votre branche, car le commit de tête de votre branche n'est pas un descendant direct du commit de tête actuel de la branche vers laquelle vous poussez.
Si ce n'était pas le cas, alors deux personnes poussant vers le même référentiel à peu près en même temps ne sauraient pas qu'un nouveau commit arrivait en même temps et celui qui poussait le dernier perdrait le travail du pousseur précédent sans aucun des deux les réalisant cela.
Si vous savez que vous êtes la seule personne à pousser et que vous souhaitez pousser un commit modifié ou pousser un commit qui remonte la branche, vous pouvez 'forcer' Git à mettre à jour la branche distante à l'aide du -f
commutateur.
git push -f origin master
Même cela peut ne pas fonctionner car Git permet aux référentiels distants de refuser les poussées non rapides à l'extrémité distante en utilisant la variable de configuration receive.denynonfastforwards
. Si tel est le cas, la raison du rejet ressemblera à ceci (notez la partie «rejetée à distance»):
! [remote rejected] master -> master (non-fast forward)
Pour contourner ce problème, vous devez soit modifier la configuration du référentiel distant, soit en tant que hack sale, vous pouvez supprimer et recréer la branche ainsi:
git push origin :master
git push origin master
En général, le dernier paramètre à git push
utiliser le format <local_ref>:<remote_ref>
, où local_ref
est le nom de la branche sur le référentiel local et remote_ref
le nom de la branche sur le référentiel distant. Cette paire de commandes utilise deux raccourcis. :master
a un local_ref nul qui signifie pousser une branche nulle vers le côté distant master
, c'est-à-dire supprimer la branche distante. Un nom de branche sans aucun :
moyen pousse la branche locale portant le nom donné vers la branche distante du même nom. master
dans cette situation est court pour master:master
.