¿Qué significa "se rechazaron las actualizaciones no avanzadas de Git push"?

153

Estoy usando Git para administrar mis dos computadoras y mi desarrollo. Estoy tratando de cometer cambios en GitHub y obtengo el error.

No se pudieron presionar algunas referencias <repo>. Para evitar que pierdas el historial, se rechazaron las actualizaciones que no son de avance rápido. Combine los cambios remotos antes de presionar nuevamente.

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

EDITAR:

Tirar del repositorio devuelve lo siguiente:

* branch master-> master (no-fast-forward) Ya actualizado

Empujar todavía me da el error antes mencionado.

Moshe
fuente

Respuestas:

136

GitHub tiene una buena sección llamada " Manejo de errores " no de avance rápido " "

Este error puede ser un poco abrumador al principio, no temas.
En pocas palabras, git no puede hacer el cambio en el control remoto sin perder commits, por lo que rechaza el empuje .
Por lo general, esto es causado por otro usuario que empuja 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 el uso de comandos como git commit --amendo git rebase.
Si bien puede anular el control remoto agregando --forceal pushcomando, solo debe hacerlo si está absolutamente seguro de que esto es lo que desea hacer.
Los empujes forzados pueden causar problemas a otros usuarios que han obtenido la rama remota, y se considera una mala práctica. En caso de duda, no fuerces .


Git no puede realizar cambios en el control remoto como una combinación de avance rápido, que ilustra una Referencia visual de Git como:

texto alternativo

Este no es exactamente su caso, pero ayuda a ver qué es el "avance rápido" (donde la HEADrama simplemente se mueve a una nueva confirmación más reciente).


El " branch master->master (non-fast-forward) Already-up-to-date" es generalmente para sucursales locales que no rastrean su contraparte remota.
Vea, por ejemplo, esta pregunta SO " git pull dice que está actualizado pero git push rechaza el avance no rápido ".
O las dos ramas están conectadas, pero en desacuerdo con su respectiva historia:
vea " Historia interminable de GIT: ¿qué estoy haciendo mal aquí? "

Esto significa que su rama de subversión y su rama maestra de git remota no están de acuerdo en algo.
Algún cambio fue empujado / comprometido a uno que no está en el otro.
Arranca gitk --all, y debería darte una pista de lo que salió mal: busca "tenedores" en la historia.

VonC
fuente
53

Significa que ha habido otras confirmaciones enviadas al repositorio remoto que difieren de sus confirmaciones. Por lo general, puede resolver esto con un

git pull

antes de empujar

Finalmente, "avance rápido" significa que los commits se pueden aplicar directamente sobre el árbol de trabajo sin requerir una fusión.

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

Una actualización de avance rápido es donde los únicos cambios de un lado son después de la confirmación más reciente del otro lado, por lo que no es necesario fusionarlos. Esto significa que debe fusionar sus cambios antes de poder impulsar.

bdukes
fuente
8

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

git push origin master --force

uspinar
fuente
1
Está incorrecto. la fuente total de github se eliminará y se empujará solo tu nueva fuente se eliminará la fuente anterior
logeshpalani98
6

Nunca hagas una git -ftareapush ya que puede tener consecuencias desastrosas posteriores.

Solo necesita hacer una git pullde su sucursal local.

Ex:

git pull origin 'your_local_branch'

y luego hacer un git push

Abhishek Thomas
fuente
0

Necesita fusionar y resolver el conflicts locally antes de enviar sus cambios a repositorio / tenedor remoto.

1) tirar (buscar y fusionar)

$ git pull remote branch 

2) Empujar los cambios

$ git push remote branch 

Aún así, tiene una opción rápida pushde usar la --forceopción por la fuerza , pero debe evitarse ya que puede provocar la pérdida de cambios o afectar gravemente a otros contribuyentes.

Muhammad Soliman
fuente