maestro rechazado -> maestro (sin avance rápido)


216

Estoy tratando de impulsar mi proyecto (todos los archivos en un nuevo repositorio). Sigo los pasos pero cuando presiono git push -u origin masteraparece este error:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Recibí este error muchas veces y no puedo entender qué hacer.


44
Si está seguro de que su maestro local tiene los últimos cambios que desea en el control remoto, entonces haga git push --force
IgorGanapolsky el

34
git push --force <remote_repository>trabajó para mi.
Clasificador

@Sorter - ¡He tenido el mismo problema todo el día, esto me ayudó! Gracias. Pero no proporciona una explicación de por qué el problema ocurrió en primer lugar y por qué funcionó la solución.
Padawan

1
@pmr, simplemente preguntando si el OP "leer el mensaje de error" no ayuda en absoluto. Obviamente, el mensaje de error no tenía ningún sentido para el OP, al igual que no lo hizo para mí ni para las otras 66 personas que votaron por su publicación. Snarky, más ingenioso que aunque no ayuda a la gente en absoluto.
Padawan

3
@Padawan También notará que esta "persona sarcástica e ingeniosa" proporcionó la respuesta aceptada para esta pregunta y 72 personas (probablemente incluyéndolo a usted) la encontraron útil. Lamento que mi comentario pareciera arrogante, pero habría sido mi primera pregunta si me hubieras hecho esa pregunta también en un contexto profesional. A veces, detenerse y tomarse un minuto para leer cuidadosamente el mensaje de error a veces hace maravillas. Lo hice por mí cuando vi ese error por primera vez.
pmr

Respuestas:


160

Como dice el mensaje de error: git pullantes de intentarlo git push. Aparentemente, su sucursal local no está sincronizada con su sucursal de seguimiento.

Dependiendo de las reglas del proyecto y su flujo de trabajo, es posible que también desee usar git pull --rebase.


1
me muestra este Auto-fusionando README.md Falló la fusión automática; arregle conflictos y luego confirme el resultado.
Asantoya17

1
@ Asantoya17 Los cambios que se han realizado en el maestro remoto están en conflicto con sus cambios. Revise el archivo y revíselos. Luego comete los resultados de la resolución. Obtenga un tutorial o libro o al menos lea los mensajes.
pmr

1
¿Qué significa pull? ¿Le permite insertar un archivo o buscar y descargar un archivo del sitio web del repositorio? (por ejemplo, Bit Bucket)
David Dimalanta

44
@AndrewS git push --force origin master. Si se encuentra con ese tipo de problemas más de una vez en su vida, el flujo de trabajo de su proyecto se interrumpe. Las características deben desarrollarse en ramas y fusionarse sin reenvío rápido y si una característica ha "fallado", debe revertir la confirmación de fusión (preferiblemente haga su prueba en una rama de integración antes de fusionar una característica para dominarla). Sin embargo, no tengo idea sobre Eclipse.
pmr

1
¿Qué hacer si ese error informa git pull origin trunk:master?
Andry

175

AVISO: este nunca es un uso recomendado de git. Esto sobrescribirá los cambios en el control remoto. Solo haga esto si sabe al 100% que sus cambios locales deben enviarse al maestro remoto.

Prueba esto: git push -f origin master


47
No, no intentes esto. De git help push: "Esto puede hacer que el repositorio remoto pierda confirmaciones; úselo con cuidado".
jcsahnwaldt Restablece a Monica el

77
definitivamente no hagas esto
Lluís

14
Esto funcionó para mí. Pensé que estaba bien porque mi único commit en github fue el creado con un nuevo repositorio. Probablemente sea una buena idea no usarlo después del inicio de un proyecto.
Matthew Moore

1
puede ser útil si desea actualizar un repositorio creado para fines de entrega (para que no haya nuevos cambios en el lado remoto)
HiB

Acabo de usar esto ya que hice un commit, sincronizado con GitHub, luego deseé haber agregado otro archivo a ese commit. Así que lo deshice localmente, ejecuté el comando anterior para borrarlo de GitHub, luego lo volví a ejecutar localmente y luego sincronicé. Todo bien ahora! Eso sí, sabía a ciencia cierta que no se hicieron otros compromisos en esa rama.
zeMinimalist

18

este comando funcionó bien para mí

git push -f origin master

3
Tenga cuidado antes de usar este comando. Al usar este comando, perderá todas sus confirmaciones pasadas.
twenk11k

-f significa fuerza de empuje
maheshmnj

@maheshmnj ¡Sí!
Testuser

15

Acabo de recibir este error.

Creé un repositorio github después de crear mi repositorio git local, por lo que necesitaba aceptar los cambios en local antes de presionar a github. En este caso, el único cambio fue el archivo Léame creado como paso opcional al crear el repositorio de Github.

git pull https://github.com/*username*/*repository*.git master

La URL del repositorio se obtiene desde aquí en la página del proyecto Github:

ingrese la descripción de la imagen aquí

Luego reinicialicé (esto puede no ser necesario)

git init
git add .
git commit -m "update"

Luego presione:

git push

3
Esta respuesta refleja el escenario real del caso.
kta

9

Creé un nuevo repositorio en github y tuve el mismo problema, pero también tuve problemas al tirar, así que esto funcionó para mí.

pero esto no se recomienda en repos que ya tienen muchos códigos, ya que esto podría estropear todo

git push origin master --force

Esta respuesta ya está dada: stackoverflow.com/a/16374574/1771479 , y no se recomienda hacerlo.
agold

9

ADVERTENCIA:

Ir por un ' git pull' NO SIEMPRE es una solución, así que ten cuidado. Puede enfrentar este problema (el que se menciona en la Q) si ha cambiado intencionalmente su historial de repositorio. En ese caso, git está confundiendo sus cambios en el historial con nuevos cambios en su repositorio remoto. Por lo tanto, debe optar por una git push --force, porque las llamadas git pulldeshacerán todos los cambios que realizó en su historial, intencionalmente.


8

Si git pullno ayuda, entonces probablemente haya presionado sus cambios (A) y luego haya git commit --amendagregado algunos cambios más (B). Por lo tanto, git piensa que puede perder el historial: interpreta B como una confirmación diferente a pesar de que contiene todos los cambios de A.

             B
            /
        ---X---A

Si nadie cambia el repositorio después A, entonces puedes hacerlo git push --force.

Sin embargo, si hay cambios posteriores Ade otra persona:

             B
            /
        ---X---A---C

entonces debe volver a basar que las personas cambian de Aa B( C-> D).

             B---D
            /
        ---X---A---C

o arregle el problema manualmente. No pensé cómo hacer eso todavía.


7

usa este comando:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

me gusta:

git pull --allow-unrelated-histories origin master

Este error ocurre cuando los proyectos no tienen ningún antepasado común.


7
git push -f origin master

use fuerza bruta ;-) Lo más probable es que esté intentando agregar una carpeta local que creó antes de crear el repositorio en git.


2
Cualquier respuesta, incluida esta, debería dar una advertencia.
D. Ben Knoble

1
Intenté esto y me costó muchas confirmaciones en GitHub que tuve que restaurar desde otro clon local del repositorio. Peligroso.
Paflow

6

Esto se debe a que hiciste algunos cambios en tu maestro, por lo que el proyecto te pide que lo hagas primero. Si quieres presionarlo de todos modos, puedes usar la fuerza bruta escribiendo esto:

git push -f origin master

Recuerde primero confirmar sus cambios:

git add .
git commit -m "Your commit message"


4

Necesitas hacer

git branch

si la salida es algo como:

* (no branch)
master

entonces hazlo

git checkout master

Asegúrese de que no tiene ningún compromiso pendiente, ya que al retirar perderá todos los cambios no comprometidos.


4

! [rechazado] maestro -> maestro (sin avance rápido)

No entre en pánico, esto es extremadamente fácil de arreglar. Todo lo que tiene que hacer es emitir un pull y su sucursal avanzará rápidamente:

$ git pull myrepo master

Luego intente de nuevo y todo debería estar bien:

$ git push github master


4

Esto me sucedió cuando estaba en la rama de desarrollo y mi rama maestra no está con la última actualización.

Entonces, cuando intenté obtener el empuje de la rama de desarrollo, tuve ese error.

Lo arreglé cambiando a rama maestra, git pull, luego volví a desarrollar rama y git push.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

Tuve este problema en una máquina de desarrollo. La devrama estaba empujando bien pero la masterrama me dio (mientras git pushing cuando estaba en la devrama):

! [rejected]        master -> master (non-fast-forward)

Entonces intenté:

git checkout master
git pull

Lo que me dio:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Descubrí que faltaba la rama maestra .git/configy agregué:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Luego git pushtambién funcionó bien en la devrama.


2

Mi control remoto no estaba sincronizado con el local, así que esto funcionó para mí

git pull --rebase

y asegúrate de que cuando lo vuelvas a hacer git pulldebería decir Ya está actualizado y ahora estás listo para ir al origen

asumiendo que ya tienes git remote add origin remote repository URL

hacer

`git push origin master`  

La captura de pantalla lo dice todo ingrese la descripción de la imagen aquí

Alternativamente, puedes hacer esto

  1. git stash (almacena trabajo no comprometido temporalmente)
  2. git pull (sincroniza tu local y remoto)
  3. git stash pop (recupera los cambios no confirmados)
  4. git push

1

Tuve lo mismo que problema. Yo uso Git Totoise. Simplemente haga clic derecho -> TotoiseGit -> Limpiar. Ahora puedes empujar a Github. Funcionó bien conmigo: D


1

Esto se debe a que ha realizado cambios conflictivos en su maestro. Y su servidor de repositorio no puede decirle eso con estas palabras, por lo que le da este error porque no es cuestión de que él lidie con estos conflictos por usted, por lo que le pide que lo haga solo. Como ?

1- git pull Esto fusionará su código de su repositorio a su código del maestro de su sitio. Entonces se muestran los conflictos.

2- tratar estos conflictos manualemente.

3-

git push origin master

Y listo, su problema ha sido resuelto.


0

Lo único que pude resolver este problema fue eliminar el repositorio local y git y crear el mismo nuevamente en ambos extremos. Funciona bien por ahora.


Siempre guardo una copia de seguridad de mi repositorio de git en Dropbox. De esa forma no tengo que eliminar el repositorio local, solo copie y pegue los directorios relevantes de Dropbox cuando surja la situación.
IgorGanapolsky

0

Si alguien tiene este error mientras intenta empujar a heroku, simplemente reemplace 'origen' con 'heroku' de esta manera: git push -f heroku master



0

Esto también puede deberse a algún error de nombre causado al dar nombre al Repo. Si alguna de las respuestas anteriores no funcionó. Esto funcionó para mí:

Elimine ese repositorio y cree uno nuevo e intente los siguientes comandos nuevamente:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

si agregar origen muestra que ya existe, use esto en su lugar:

git remote set-url origin *your_git_name.git*
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.