Pregunta Git dice que la sucursal local está detrás de una sucursal remota, pero no es


Guión:

  1. Hago una nueva sucursal
  2. piratearlo
  3. cometerlo
  4. empujalo
  5. hackearlo un poco más
  6. cometer nuevamente
  7. intenta empujar de nuevo

Git responde:

Las actualizaciones fueron rechazadas porque la punta de su rama actual está detrás   su contraparte remota. etc.

Soy el único que piratea esta rama, nadie más lo está tocando. La rama remota es en realidad detrás la rama local. No debería tener que tirar para nada.

(Y si lo hago, Git informa conflictos entre los dos, y me obliga a fusionar la rama en sí mismo)

¿Por qué está sucediendo esto? ¿Y cómo puedo diagnosticarlo / corregirlo?

Para ser claro, no estoy ramificando en ninguna parte, y nadie más está trabajando en eso:

Remote: Commit A -------- Commit B  

Local:  Commit A -------- Commit B -------- Commit C  

C es una continuación directa de B, sin ramificación involucrada. Pero git piensa que C es una rama de A:

Remote: Commit A -------- Commit B  

                  ------- Commit C  
                /  
Local:  Commit A -------- Commit B  

No es; es una continuación directa de B.


74
2017-09-29 05:41


origen


Respuestas:


¿Probablemente reescribiste algo la historia? Su sucursal local divergió de la del servidor. Ejecute este comando para obtener una mejor comprensión de lo sucedido:

gitk HEAD @{u}

Recomiendo encarecidamente que intentes comprender de dónde viene este error. Para solucionarlo, simplemente ejecuta:

git push -f

los -f hace esto un "empuje forzoso" y sobrescribe la rama en el servidor. Eso es muy peligroso cuando trabajas en equipo. Pero ya que estás solo y seguro de que tu estado local es correcto esto debería estar bien. Te arriesgas a perder el historial de compromisos si ese no es el caso.


183
2017-09-29 09:03



Esto me sucedió cuando estaba tratando de impulsar la rama de desarrollo (estoy usando flujo de git). Alguien tenía actualizaciones push para master. para arreglarlo lo hice:

git co master
git pull

Que obtuvo esos cambios. Entonces,

git co develop
git pull

Lo cual no hizo nada. Creo que la rama de desarrollo ya empujó a pesar del mensaje de error. Todo está actualizado y no hay errores.


4
2018-04-28 19:25



La solución es muy simple y funcionó para mí.

Prueba esto :

git pull --rebase <url>

entonces

git push -u origin master

2
2017-08-14 10:43



Para diagnosticarlo, sigue esta respuesta.

Pero para solucionarlo, sabiendo que eres el único que lo está cambiando, hazlo:
1 - haga una copia de seguridad de su proyecto (solo hice los archivos en la carpeta git, ./src)
2 - git pull
3 - restaurar su copia de seguridad sobre los muchos archivos "en mal estado" (con indicadores de fusión)

Lo intenté git pull -s recursive -X ours pero no funcionó de la manera que yo quería, ¡podría ser una opción, pero primero, haz una copia de seguridad!

Asegúrese de que las diferencias / cambios (en git gui) no sean ninguno. Este es mi caso, no hay nada que fusionar en absoluto, pero github sigue diciendo que debería fusionarme ...


0
2017-09-20 02:30