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 se rechazaron porque la punta de su twig actual está detrás de su contraparte remota. etc.

Soy el único que piratea esta twig, nadie más lo está tocando. La twig remota está realmente detrás de la sucursal 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 twig 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 ello:

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 twig de A:

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

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

¿Probablemente reescribiste algo la historia? Su sucursal local divergió de la del server. Ejecute este command para get 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 

El -f convierte en un "empuje forzado" y sobrescribe la twig en el server. Eso es muy peligroso cuando trabajas en equipo. Pero ya que está solo y seguro de que su estado local es correcto, esto debería estar bien. Te arriesgas a perder el historial de compromisos si ese no es el caso.

Esto me sucedió cuando estaba tratando de impulsar la twig 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 twig de desarrollo ya empujó a pesar del post de error. Todo está actualizado y no hay errores.

Para diagnosticarlo, sigue esta respuesta .

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

git pull -s recursive -X ours pero no funcionó como yo quería, aunque podría ser una opción, ¡pero primero haz una copy de security!

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 …

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

Prueba esto :

 git pull --rebase <url> 

entonces

 git push -u origin master