2011-01-13 31 views
116

Estoy usando Git para administrar mis dos computadoras y mi desarrollo. Estoy intentando realizar cambios en GitHub y obtengo el error.¿Qué significa "las actualizaciones de Git push non-fast-forward fueron rechazadas"?

Error al empujar algunos refs a <repo>. Para evitar que pierda el historial, se rechazaron las actualizaciones que no son de avance rápido. Combine los cambios remotos antes de volver a presionar.

¿Qué podría estar causando esto y cómo puedo solucionarlo?

EDIT:

Al tirar de la cesión temporal devuelve lo siguiente:

* rama de master> maestro (no avance rápido) ya en marcha al día

Empujar todavía me da el error antes mencionado.

+0

Véase también [Git no avanzar rápidamente rechazada] (http: // stackoverflow. com/q/5667476/456814). –

Respuesta

108

GitHub tiene una buena sección llamada "Dealing with “non-fast-forward” errors"

Este error puede ser un poco abrumador al principio, no temas.
En pocas palabras, git no puede realizar el cambio en el control remoto sin perder confirmaciones, por lo que rechaza la inserción.
Por lo general, esto es causado por otro usuario empujando a la misma rama. Puede remediar esto buscando y fusionando la rama remota, o usando pull para realizar ambas cosas a la vez.

En otros casos, este error es el resultado de cambios destructivos realizados localmente mediante comandos como git commit --amend o git rebase.
Si bien puede anular el control remoto agregando --force al comando push, solo debe hacerlo si está absolutamente seguro de que esto es lo que desea hacer.
Los impulsos de fuerza pueden causar problemas a otros usuarios que han buscado la rama remota, y se consideran malas prácticas. En caso de duda, no presione forzadamente.


Git no puede hacer cambios en el mando a distancia como una combinación de avance rápido, que un Visual Git Reference ilustra como:

alt text

Esto no es exactamente su caso, pero ayuda a vea qué es el "avance rápido" (donde el HEAD de una rama simplemente se mueve a una nueva confirmación más reciente).


El "branch master->master (non-fast-forward) Already-up-to-date" es por lo general para las sucursales locales que no hacen un seguimiento de su contra-parte remota.
Véase, por ejemplo, esta pregunta SO "git pull says up-to-date but git push rejects non-fast forward".
O las dos ramas están conectadas, pero en desacuerdo con su respectiva historia:
Ver "Never-ending GIT story - what am I doing wrong here?"

Esto significa que su rama de la subversión y su rama principal Git remoto no están de acuerdo en algo.
Algunos cambios fueron enviados/confirmados a uno que no está en el otro.
Encienda gitk --all, y debería darle una pista de lo que salió mal - busque "horquillas" en el historial.

42

Significa que se han enviado otras confirmaciones al repositorio remoto que difieren de sus confirmaciones. Generalmente, usted puede resolver esto con un

git pull 

antes de empujar

En última instancia, "avance rápido" significa que las confirmaciones se pueden aplicar directamente en la parte superior del árbol de trabajo sin necesidad de una fusión.

+1

¡Esto es lo que funcionó para mí! ¡Olvidé que cambié el archivo readme.md en el sitio del repositorio! – ryanwinchester

9

Una actualización rápida es donde los únicos cambios son de un lado después de la confirmación más reciente en el otro lado, por lo que no es necesario que haya ninguna fusión. Esto significa que necesita fusionar sus cambios antes de poder presionar.

0

es posible que desee utilizar la fuerza con la operación de empuje en este caso

git push origin master --force