2012-03-23 67 views
54

Sé que la gente ha hecho preguntas similares, pero creo que las causas de sus problemas son diferentes. Hice un restablecimiento completo porque había ensuciado mi código bastante malogit push rejected: error: error al presionar algunas referencias

git reset --hard 41651df8fc9 

He hecho bastantes cambios, he hecho algunas confirmaciones y ahora que estoy tratando de empujar todas estas confirmaciones en el servidor me sale el siguiente error:

! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]' 

Git sugiere hacer un git pull y eso es lo que otras personas han sugerido a otros usuarios. Sin embargo, creo que un git pull fusionará mi código actual con el código que ya no quiero (revisión de la cabeza). ¿Cómo puedo presionar y olvidarme de la versión/revisiones que tengo delante?

Respuesta

90

git push -f si tiene permiso, pero eso arruinará a cualquier otra persona que saque de ese repositorio, así que tenga cuidado.

Si eso es denegada, y se tiene acceso al servidor, como canzar dice a continuación, puede permitir esto en el servidor con

git config receive.denyNonFastForwards false 
+0

supongo que no tengo permiso 'a distancia : error: denegación de refs/heads/master sin avance rápido (debe tirar primero) 'Soy el único que trabaja en este repositorio en este momento, así que no estoy preocupado por ninguna otra rama ni nada. ¿Algunas ideas? – Eric

+0

Si usted es la única persona que posee este repositorio, simplemente use 'git push -f', que usará su repo actual y reemplazará el remoto. Si hay un desarrollo de múltiples usuarios, el avance rápido es esencial, de lo contrario, muy fácilmente pasará desagrado. – Tim

+1

Si puede iniciar sesión en el control remoto, puede ir directamente al repositorio de git simple y rebobinar manualmente la rama, con 'git branch -f', por ejemplo,' git branch -f rewind_the_one_I_broke 8120307' por ejemplo. Puede ejecutar 'git log' en un repositorio simple para encontrar el punto de reinicio. Tenga en cuenta que esto tiene el mismo efecto que un 'git push -f', pero omite los ganchos. – torek

23

Si usted es la única persona trabajando en el proyecto, lo que puede hacer es:

git checkout master 
git push origin +HEAD 

Esto establecerá la punta de origen/maestra para cometer el mismo como maestro (y así eliminar las confirmaciones entre 41651df y origin/master)

+0

¿Esto eliminará el código que ya no quiero y conservará mi nuevo código? (lo siento si es una respuesta tonta) – Eric

+2

esto establecerá la sugerencia de origen/maestro en el mismo compromiso que el maestro (y así eliminar las confirmaciones entre 41651df y origen/maestro) – ouah

+0

Actualizar la rama maestra del repositorio de origen con el HEAD actual ubicado rama, lo que permite actualizaciones que no avanzan rápidamente. Entonces, esto es lo mismo con 'git push HEAD -f'. Para mí, creo, puedes usar una forma más suave de hacer esto, primero, usa 'git fetch', después de eso, usa' git rebase -i origin/master', esto te permitirá seleccionar los commits. – Tim

4

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

Este mensaje sugiere que hay un gancho en el servidor que rechaza los impulsos de avance rápido. Sí, por lo general no se recomienda y es una buena protección, pero como usted es la única persona que lo usa y desea hacer el empuje de fuerza, comuníquese con el administrador del repositorio para permitir el avance no rápido extrayendo temporalmente el gancho o darle el permiso en el gancho para hacerlo.

+1

O haga que el administrador ejecute 'git branch -f', que tiene el mismo efecto pero no requiere alboroto con el gancho de pre-recepción. – torek

10

Eso sí,

git pull origin [branch] 

y, entonces debería ser capaz de empujar.

Si tiene compromete por su cuenta y no lo ha introducido la rama aún, trate

git pull --rebase origin [branch] 

y entonces usted debe ser capaz de empujar.

0

Lo que hice para resolver el problema era:

git pull origin [branch] 
git push origin [branch] 

También asegúrese de que usted está señalando a la rama derecha ejecutando:

git remote set-url origin [url] 
Cuestiones relacionadas