Ne peut pas pousser les changements après avoir utilisé git reset -- hard

j'ai commis une erreur et j'ai apporté des changements à git que je n'aurais pas dû faire. Après avoir fait l'engagement, j'ai poussé mes changements. J'ai ensuite utilisé les commandes suivantes pour essayer de réinitialiser mes modifications.

 git reset --hard head

maintenant je veux pousser ce 'reset' au dépôt distant avec cette commande:

git push MyBranch

Mais j'obtiens cette erreur:

remote: error: denying non-fast-forward refs/heads/branch (you should pull first)

j'ai essayé d'utiliser cette commande, sans succès:

git push -f "origin" 

une idée de ce que je peux faire?

32
demandé sur Michael Durrant 2012-03-21 15:59:48

2 réponses

git push -f origin myBranch 

devrait fonctionner (à condition que vous sachiez que cela peut être dangereux si MyBranch a déjà été récupéré par d'autres dans leur propre repo)

Note: si votre Remote repo ('origin') a son config set avec

receive.denyNonFastForwards true

il niera toute poussée Non rapide vers l'avant (même si elle est forcée).

Voir " y a-t-il un moyen de configurer le dépôt git pour rejeter 'git push --force'? ".


Le OP user654019 rapports

j'ai réussi à résoudre le problème cette fois en réglant denyNonFastForwards à false et en utilisant -f pour forcer la poussée

Si l'OP n'ont pas accès à des pensions de titres, il/elle devra:

  • réinitialiser la tête locale à sa position initiale (voir " git reset --hard? "):

    git reset HEAD@{1}
  • faire un nouvelle commit qui annuler votre fusion, comme décrit dans la ProGit livre , avec git revert :

    git revert -m 1 HEAD~ (dans votre cas)

par exemple:

$ git revert -m 1 [sha_of_C8]
Finished one revert.
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
 1 files changed, 0 insertions(+), 2 deletions(-)

revert a merge

Une discussion complète sur la façon de revenir à une fusion peut ici .

l'idée reste de générer seulement nouveau commits, y compris une inversion des changements introduits par la commit de fusion.

Vous pouvez alors pousser ce nouveau commit, comme un changement rapide en avant.

63
répondu VonC 2017-05-23 11:54:29

vous devez spécifier quelle réf vous voulez pousser:

git push -f origin MyBranch
6
répondu ralphtheninja 2012-03-21 12:12:47