2012-03-21 10 views
27

Tuve un error y cometí algunos cambios en git que no debería haber cometido. Después de realizar la confirmación, impulsé mis cambios. Luego utilicé los siguientes comandos para tratar de restablecer mis cambios.No se pueden insertar cambios después de usar git reset --hard

git reset --hard head 

Ahora quiero llevar este 'reset' al repositorio remoto con este comando:

git push MyBranch 

Pero estoy recibiendo este error:

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

Me trataron de utilizar este comando sin ningún éxito:

git push -f "origin" 

¿Alguna idea de lo que puedo hacer?

Respuesta

53
git push -f origin myBranch 

debería funcionar (siempre y cuando esté consciente de esto puede ser peligroso si MyBranch ya se fue a buscar por otros en su propio repo)

Nota: si tu repositorio remoto ('origen') tiene su conjunto config con

receive.denyNonFastForwards true 

negará cualquier impulso de avance rápido (incluso forzado).
Ver "Is there a way to configure git repository to reject 'git push --force'?".


Los informes OP user654019

I managed to solve the problem this time by setting denyNonFastForwards to false and using -f to force the push

Si el PO no tuvo acceso al repositorio, él/ella tendrían que:

Por ejemplo:

$ 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

Una discusión completa sobre cómo revertir una fusión puede be found here.

La idea sigue siendo sólo para generar nuevos las confirmaciones, entre ellos uno revertir los cambios introducidos por la fusión cometen.
Luego puede enviar esa nueva confirmación, como un cambio rápido.

+0

No funcionó. Probablemente la configuración se establece en el repositorio. Dos preguntas: ¿Cuál es la mejor manera de resolver este problema si denyNonFastForwards es verdadero? ¿Cómo puedo revertir algunos cambios (una combinación) y crear un nuevo compromiso? – mans

+0

@ user654019: al crear una nueva confirmación compuesta por cambios que cancelan su confirmación anterior: use [git revert] (http://linux.die.net/man/1/git-revert): podrá empujar esa confirmación nueva confirmación como un impulso rápido. – VonC

+0

La confirmación original fue una fusión y cuando traté de hacer un revertir -m 1 Obtuve un error – mans

3

es necesario especificar qué Ref usted quiere empujar:

git push -f origin MyBranch 
Cuestiones relacionadas