Notre branche principale distante s'est en quelque sorte foirée. Le code de développement actuel se trouve sur la branche principale avec les derniers commits. De toute évidence, le code de développement n'est pas prêt pour la branche principale.
Donc , sur mon dépôt local, je l' ai fait une remise à la dernière balise git reset --hard (Tag)
. La branche principale est maintenant correcte sur mon référentiel local. Maintenant, lorsque j'essaie de transmettre les modifications au référentiel distant git push origin master
, j'obtiens une erreur:
To (REMOTE GIT REPOSITORY LOCATION)
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
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.
Alors après avoir regardé autour de moi, j'ai découvert l' --force
option. J'ai donc fait une poussée forcée sur le référentiel distant git push --force origin master
, et j'ai toujours une erreur:
Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To (REMOTE GIT REPOSITORY LOCATION)
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
Je ne peux pas tirer sur master, car il contient du code de développement qui ne peut pas être sur master.
denyNonFastforwards = true
. Je l'ai changé en faux, j'ai poussé mes modifications, puis je l'ai changé en vrai. Merci encore à tous, pour l'aide.Réponses:
Le message signifie que vous n'êtes pas autorisé à effectuer une poussée non rapide.
Votre référentiel distant a très probablement
denyNonFastforwards = true
dans sa configuration. Si vous changez cela, celagit push --force
devrait fonctionner.Pour modifier le paramètre, vous devez accéder à la machine avec le référentiel distant. À partir de là, faites
git config receive.denynonfastforwards false
.la source
git config
pour un serveur? Ou peut-être que vous utilisiez cela métaphoriquement. Pour jouer avec ces idées, j'ai créé un dépôt de test dans/opt/git
(mon espace serveur git), puis j'ai modifié ce paramètre dans/opt/git/the_repo/the_repo.git/config
. Mais une fois fait, legit push --force origin SHA:branch
travail a été effectué au besoin.La télécommande ne permet pas les avances non rapides.
Votre meilleure option est de prendre
git revert
tous les commits qui ne devraient pas être là et d'être plus prudent à l'avenir.git revert [commit]
va créer un nouveau commit qui annule tout ce qui a été[commit]
fait.la source
Étapes pour activer en permanence la poussée forcée dans le style suivant
Modifiez le fichier nommé "config" dans le dossier se terminant par ".git" sur votre référentiel distant
Dans la sortie de ligne de commande de git suite à l'échec du push, recherchez la ligne qui dit quelque chose comme:
puis
Définissez "denyNonFastforwards" sur false
Dans "config", définissez
Vous pouvez maintenant pousser depuis votre machine locale avec -f
la source
git revert
est un peu compliqué lorsque vous avez des fusions. Pour être plus compliqué, mon cas a 3 fusions, dont une avec de très vieux ~ 20 commit divergé de develop, 2nd est une sorte de fusion de master - laid comme l'enfer.Essayez d'utiliser l'
-f
indicateur et de le mettre après le nom de la branche distante.git push origin master -f
la source
git push -f origin master
et même résultat. Les deux fois que je l'ai essayé, j'ai reçu la deuxième version du message d'erreur.Vous n'êtes pas autorisé à faire git push qui n'est pas une avance rapide.
Si la télécommande est GitHub, accédez à
https://github.com/$USER/$REPO/settings/branches
et dé-protégez la branche en question.Vous devez être administrateur du repo pour ce faire.
Si la télécommande est votre propre serveur git, exécutez-
git config receive.denynonfastforwards false
y.la source
La meilleure façon de contourner ce problème est de supprimer la branche distante et de la renvoyer:
la source
Le problème se produit car la branche actuelle n'est pas configurée correctement pour le PULL . Vérifiez d'abord si la branche amont est correctement configurée pour l'extraction à l'aide de -
git remote show origin
. Vous pouvez le trouver dans la section - Les sections locales configurées pour « git pull »: . Sinon, configurez-le en utilisant:Donnez le nom de la succursale approprié pour l'espace réservé - MYBRANCH
la source
J'utilise ce groupe de commandes pour réinitialiser mon dépôt distant, cela réinitialisera votre dépôt local et reliera à nouveau votre dépôt distant, puis forcera à pousser les mises à jour.
Je pense que cette méthode ne fonctionnera pas dans votre cas, mais peut être utile pour quelqu'un d'autre
allez dans le dossier source puis exécutez les commandes: notez qu'il
https://github.com/*.git
s'agit de votre lien de dépôt distant**Note: this will clear all your git history on your master branch**
la source
Pour moi, l'indice de @svick allait dans la bonne direction. Étant donné que le serveur git que je voulais modifier est en fait ma boîte, je me suis connecté et j'ai fait un
git config --global receive.denynonfastforwards false
pour changer tous les dépôts pour accepter un push non-ff forcé. Cela n'a pas fonctionné hors de la boîte. Ce que j'ai trouvé, c'est que dans la configuration, il était déjàreceive.denynonfastforwards=true
défini et qu'il ne pouvait pas être effacé avecgit config --global --unset receive.denynonfastforwards
. La modification manuelle du dépôt (vi config
) a cependant fonctionné.la source
J'ai résolu en supprimant la branche principale de protected et également par défaut, qui est juste au-dessus des règles de branche protégées dans la configuration d'un référentiel.
la source