Branch se está fusionando en self en git push

Tengo un repo configurado en GitHub, con una twig Dev, que clono en mi máquina local usando:

git clone https://github.... 

Luego cambio a mi twig Dev usando:

 git checkout -b Dev 

A continuación, selecciono solo para asegurarme de que todo esté actualizado

 git pull origin Dev 

Ahora estoy en mi twig Dev, escribo un código y agrego los files usando:

 git add filename 

Luego me comprometo a usar:

 git commit -m "message" 

Luego presiono usando:

 git push origin Dev 

Esto funciona todo bien. Luego aparece un segundo usuario e ingresa algún código. Al mismo time, estoy trabajando en un file separado, pero estamos trabajando en la misma twig. Agrego y me comprometo como antes. Sin embargo, cuando bash presionar, recibo lo siguiente:

¡A https://github.com/ex/ex.git ! [rechazado]
Dev -> Dev (recuperar primero) error: error al presionar algunos refs a ' https://github.com/ex/ex.git ' sugerencia: las actualizaciones fueron rechazadas porque el control remoto contiene trabajo que usted sugiere: no tener localmente. Esto generalmente es causado por otro repository que empuja pista: a la misma ref. Es posible que desee fusionar primero los cambios remotos (por ejemplo, sugerencia: 'git pull') antes de volver a presionar. sugerencia: consulte la 'Nota sobre los avances rápidos' en 'git push –help' para más detalles.

Hago lo que dice y realiza:

 git pull origin Dev 

Puedo presionar como antes y todo parece estar bien. Sin embargo, de vuelta en GitHub cuando reviso el historial de compromiso veo esto:

  Merge branch 'Dev' of https://github.com/ex/ex into Dev 

entre las confirmaciones que acabo de agregar. ¿Por qué está ocurriendo esta fusión? ¿Cómo puedo evitar que esto suceda?

La fusión fue necesaria porque usted y su segundo usuario divergieron; cada uno de ustedes cometió algo fuera de una base común. Volver a sincronizarse requiere combinar las dos routes de desarrollo.

Un 'commit de fusión' no hace daño alguno; realmente no vale la pena preocuparse por eso. Sin embargo, si desea evitarlo, a menudo para mantener un historial más limpio, realiza:

 git pull --rebase ... 

que volverá a establecer la base de tus nuevos compromisos en lo que se extraiga del repository. La historia aparecerá lineal.

Aquí hay un ejemplo. Un repository con dos twigs:

 $ git log --oneline --graph --all * 678ea83 c | * 2c1e48f b |/ * 5836f6f a 

El resultado de la fusión:

 $ git merge dev Merge made by the 'recursive' strategy. 0 files changed create mode 100644 b $ git log --oneline --graph --all * 6d50134 Merge branch 'dev' |\ | * 2c1e48f b * | 678ea83 c |/ * 5836f6f a 

Alternativamente, el resultado de rebase:

 $ git rebase dev First, rewinding head to replay your work on top of it... Applying: c $ git log --oneline --graph --all * 89a3771 c * 2c1e48f b * 5836f6f a 

Debido a que su último compromiso estaba integrado:

  • tenías que tirar porque dev @ origin era "más nuevo"

  • con la extracción combinó dev @ origen con su desarrollador local

  • su desarrollador local tenía un compromiso, que originalmente quería impulsar al origen

  • finalmente dev @ origin se fusionó con su confirmación (por lo que dev se fusionó con dev)