Git push falló, "Se rechazaron las actualizaciones que no son de avance rápido"

99

Edité mis repositorios GIT a través de Git Online. Después de que intenté impulsar los cambios de mi código local, recibí un error:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

¿Cómo puedo arreglar esto?

Sarath
fuente

Respuestas:

137

Extraiga los cambios primero:

git pull origin branch_name
iafonov
fuente
1
Si eso no resuelve su problema, asegúrese de que está presionando a la misma rama en la que está trabajando actualmente. Compruebe en qué rama se encuentra con "git status".
afilina
1
Este comando me funcionó, sin embargo, me gustaría saber, ¿por qué esto no git pull:? El mando a distancia es igual a origin, por lo que realmente ejecuta: git pull origin. ¿No debería actualizar todas las ramas?
Karlen Kishmiryan
83

Agregue --force a su línea de comando si está seguro de que desea presionar. Por ejemplo, use git push origin --force(recomiendo la línea de comando ya que encontrará mucho más soporte de otros usuarios con la línea de comando. Además, esto puede no ser posible con SmartGit). Consulte este sitio para obtener más información: http://help.github.com/ mandos a distancia /

Mate
fuente
8
--force resolverá sus problemas pero potencialmente dañará a otros. Debe usarse solo con mucho cuidado (y conocimiento)
schoetbi
7
-1 porque forzar empujones en general es una idea terrible.
joshin4colours
6
+1 porque 5 personas estuvieron de acuerdo con @ joshin4colours en dar -1. Pero si bien el empuje forzado no siempre es la mejor idea (lo que git deja bastante claro al negar tu empuje), si fuera una mala idea el 100% del tiempo, la opción no existiría. La sugerencia de Matt aquí ciertamente puede ser útil para otros.
user1271772
2
Siéntase libre de usar el --forcesi es el único que usa esa rama. Sin embargo, causa problemas al compartir una rama con otros desarrolladores.
Robert Brisita
22

Antes de presionar, haz un git pull con la opción de rebase. Esto obtendrá los cambios que realizó en línea (en su origen) y los aplicará localmente, luego agregará sus cambios locales encima.

git pull --rebase

Ahora puedes presionar al control remoto

git push 

Para obtener más información, consulte la explicación de Git rebase y el Capítulo 3.6 Git Branching - Rebasing .

satishgoda
fuente
2
En mi caso git pull --rebasetermina conThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder
17

Encontré el mismo error, solo agregue "--force" al comando, funciona

git push origin master --force
Wen Qi
fuente
6
¿Hay consecuencias para esto?
jayunit100
8
perder compromisos de otros.
Giovanni Toraldo
1
Tuve una situación extraña en la que esto es exactamente lo que quería hacer ... eliminar el contenido de una rama maestra remota recién creada con algo nuevo. Esto resolvió mi problema. Si bien no es la solución para todos, --forcepuede ser útil.
Brad
1
No creo que esta respuesta merezca ser rechazada 6 veces. Esta es una solución válida al problema proporcionado, sin embargo, el autor podría haber sido un poco más descriptivo con respecto a las circunstancias en las que este comando sería útil. Si vale la pena mencionarlo, ya que valió la pena escribirlo (la funcionalidad para --force)
Aiden Strydom
5

Tuve el mismo problema.
La razón era que mi sucursal local de alguna manera había perdido el seguimiento de la contraparte remota.

Después

git branch branch_name --set-upstream-to=origin/branch_name
git pull

y resolviendo los conflictos de fusión, pude presionar.

duro
fuente
Parece que se ha perdido los cambios en la sucursal remota
ozma
5

Puede agregar --force-with-lease al comando, funcionará.

git push --force-with-lease

--force es destructivo porque sobrescribe incondicionalmente el repositorio remoto con lo que tenga localmente. Pero --force-with-lease asegura que no sobrescriba el trabajo de otros.

Vea más información aquí .

igorjosesantos
fuente
1

(Una) Solución para Netbeans 7.1: Pruebe un tirón. Esto probablemente también fallará. Ahora eche un vistazo a los registros (generalmente se muestran ahora en el IDE). Hay una o más líneas que dicen:

"Error al extraer debido a este archivo:"

Busque ese archivo, elimínelo (haga una copia de seguridad antes). Por lo general, es un archivo .gitignore, por lo que no eliminará el código. Rehacer el empujón. Todo debería funcionar bien ahora.

Sliq
fuente
1

Usar la --rebaseopción funcionó para mí.

  • git pull <remote> <branch> --rebase

Luego empuje al repositorio.

  • git push <remote> <branch>

P.ej

git pull origin master --rebase

git push origin master

CyberDemic
fuente
0

He tenido el mismo problema. Resolví con

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>
Andrea Perdicchia
fuente
3
OP dice sobre impulsar cambios de código local. checkoutsobrescribirá estos cambios o al menos no los incluirá en push.
trejder
0

Esto es lo que funcionó para mí. Se puede encontrar en la documentación de git. aquí.

Si se encuentra en la rama deseada, puede hacer esto:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work
CodeChops
fuente
0

Encontré el mismo problema, para solucionarlo, ejecute los siguientes gitcomandos.

  • git pull {url} --rebase
  • git push --set-upstream {url} master

Primero debes haber creado el repositorio en github.

blackFoxCoder
fuente
0

A veces, mientras tira de su git, el HEAD se desprende. Puede verificar esto ingresando el comando:

git branch 
  • (CABEZA separada de 8790704)

    Maestro

    desarrollar

Es mejor moverse a su rama y tomar una nueva dosis de su rama respectiva.

git checkout develop

git pull origin develop

git push origin develop
Abhinav
fuente