2010-08-30 23 views
13

git push origin master muestra un errorNo puedo presionar a git?

no pudieron empujar algunas referencias a '[email protected]:xyz/abc.git' Para evitar que pierda la historia, las actualizaciones no avance rápido fueron rechazadas combinar los cambios remotos antes de empujar de nuevo. Consulte la sección 'Nota sobre avances rápidos' de 'git push --help' para más detalles.

¿Qué es esto? Cómo recuperar esto?

+2

Quizás quiso "ver la 'Nota sobre avanza rápidamente' de la sección 'git push --help' para más detalles"? Es demasiado largo para reproducirlo aquí, pero describe el problema exacto, junto con los diagramas de asci-art –

Respuesta

28

Véase el "pushing a branch" section from GitHub help page:

en cuanto a “-forward no rápido” errores

De vez en cuando se puede encontrar este error mientras empuja:

$ git push origin master 
To ../remote/ 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '../remote/' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes before pushing again. See the 'non-fast forward' 
section of 'git push --help' for details. 

Este error puede ser un poco abrumador al principio, d o no miedo
En pocas palabras, git no puede realizar el cambio en el control remoto sin perder confirmaciones, por lo que rechaza el envío. 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 comandos como git commit --amend o git rebase.
Si bien puede anular el control remoto agregando --force al comando de inserción, solo debe hacerlo si está absolutamente seguro de que esto es lo que desea hacer. Los empujones forzados pueden causar problemas a otros usuarios que han buscado la rama remota, y se consideran malas prácticas. En caso de duda, no presione la fuerza.


detalles del modo en el "Note about fast-forwards" of git push, como se ha mencionado por Michael Mrozek en los comentarios.

3

Bastante importante: esto también puede ocurrir si el nombre de la rama en la que se encuentra (y desea fusionar) y la rama ascendente no son lo mismo. Entonces el flujo de trabajo podría verse así:

git pull --rebase    # to retrieve upstream changes, replay yours on top 
git push --dry-run --verbose origin HEAD:master # always good idea: dry-runs.. 
git push origin HEAD:master # actually push current branch head (non-master) to upstream master 
2

Si obtiene este error y su.archivo/git config está muy bien y luego ir a través de estos pasos (este es un problema común con un submódulo en repositorios Git - de nuevo hacer esto desde el directorio submódulo)

  1. master git checkout
  2. git pull
  3. (fusión ocurre en el fondo)
  4. git push
+0

. ¿No estoy seguro de lo que intentas decir aquí? por favor explique más claramente. –

+0

Está tratando de ver si intentas empujar desde una rama y recibir un mensaje de rechazo, sigue los pasos y todo estará bien ... Esto funcionó para mí como un campeón ... Gracias jclaan ... sí, lo hizo merge en segundo plano – zee

5

Además de la respuesta de VonC,

en caso de que, inte nd para anular los cambios remotos con su local

$git push --force 

va a hacer.

+0

Como la respuesta de VonC dice "Si bien puedes anular el control remoto agregando --force al comando push, solo deberías hacerlo si estás absolutamente seguro de que esto es lo que quieres hacer". – Intrications

2

primer tirón luego empuje

git pull origen any_branch_name

0

tuve esto también y no podía encontrar en cualquier lugar en StackOverflow con la siguiente pepita útil claramente establecida: Git no permitirá que se presiona a una rama diferente si su rama de trabajo ha divergido de ella. Hay una solución fácil: simplemente cambie a la rama a la que desea presionar y combine su rama de trabajo. Así que en lugar de intentar esto:

git push origin master <========== On "mybranch" 

hacer esto:

git checkout master  <========== Switch to the branch you want to push to 
git pull origin master <========== Get latest from remote repository 
git pull origin mybranch <========== Merge in changes from "mybranch" 
======== Resolve any issues ======== 
git push origin master <========== Push the merged changes 
Cuestiones relacionadas