Git push error after pull –rebase

Cambié los cambios de un upstream master repo upstream master remoto a mi twig de desarrollo local y luego intenté aplicar los cambios a mi repository utilizando estos commands:

 git pull --rebase upstream master git push origin dev 

pero el último command resultó en ese error:

 error: failed to push some refs to 'https://github.com/m-adil/some_repo.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (eg hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

Esto es a lo que me estoy enfrentando por tercera vez pero que aún no he encontrado una solución perfecta. Hacer git pull ... como se sugirió en la segunda última línea de error, da como resultado la producción de todos los conflictos otra vez que arruina el reciente git pull --rebase ... En tales casos, git reset --hard [email protected]{1} remedia pero ¿cuál es el mejor enfoque en este caso para impulsar sus cambios?

Exploré esto y encontré varias preguntas similares aquí, pero con algunas distinciones minuciosas que no me aclaran este problema. La mayoría de las respuestas seleccionadas sugieren hacer git push --force origin my_branch pero también tiene inconvenientes y uno puede perder sus cambios en el control remoto, por lo que no se puede sugerir. Lo mejor que he llegado a saber es crear y pagar en una nueva sucursal que es mejor que muchas otras soluciones / respuestas. Pero esto es más como un truco para escaping de estos problemas en lugar de un enfoque correcto para enfrentar esa situación. Entonces, ¿algún organismo puede aclarar si comparte el enfoque correcto en este caso?

Dado que su twig de desarrollo es privada y usted es el único que la usa en este momento, entonces no hay nada intrínsecamente incorrecto en reescribir su historial y luego hacer un empujón de fuerza. Como ha señalado, la forma de evitar el error que está obteniendo es forzar el empuje hacia el control remoto, por ej.

 git push --force origin dev 

Esto sobrescribiría la twig de desarrollo remoto con lo que tenía localmente. Pero como nadie más puede ver esto aparte de ti, debería ser seguro hacerlo.

A modo de diagtwigs, considere que dev inicia en el control remoto con una confirmación adicional más allá de lo que tiene el master :

 master: ... A -- B -- C \ dev: D 

Ahora, alguien más ha hecho un trabajo en el master , y empujó ese trabajo. Digamos que es solo una confirmación, dejándonos con esto:

 master: ... A -- B -- C -- E \ dev: D 

Localmente, hiciste una rebase de dev en master , que nos da las siguientes twigs (ten en count que un dev está marcado como local):

 master: ... A -- B -- C -- E \ \ dev: D \ \ local-dev: D' 

Pero ahora, cuando intentas empujar local-dev al desarrollador remoto, Git se confunde. Se confunde porque lo que remotamente es la confirmación D encima de C Pero su sucursal local, que está tratando de impulsar, ha confirmado E--D' en la parte superior de C No puede resolver esto automáticamente, por lo que falla. Hacer el empuje de la fuerza evita esto, lo que en su situación debería ser algo aceptable.