¿Por qué las twigs eliminadas no se eliminan en el control remoto después de presionar?

Estoy usando git-flow y lo que hace es que elimina mi feature/abc branch cada vez que lo hago:

 git flow feature abc finish 

Elimina la twig feature/abc después de fusionarla con la twig develop . Después de eso, presiono mi twig de develop .

 git push origin develop 

Ahora, en el control remoto, puedo ver la twig feature/abc , pero no localmente. Entonces, ¿eso significa que se eliminó del repository local y que la eliminación no se llevó a remoto?

En mi entendimiento :

  • Dado que git se distribuye, entonces todo el repository existe en todas las máquinas.
  • Entonces, si hago un cambio en mi repository local y lo presiono a un control remoto.
  • Entonces, todos mis cambios deben ser empujados al control remoto, incluida la eliminación.

Conflicto:

  • ¿Cómo puede ser diferente el repository de git local y remoto después de un push?

=> Supongamos que soy el único desarrollador en el código.

Actualizar

Mi pregunta es que eliminé la twig localmente después de la fusión. luego empujé la twig a la que me fundí, entonces ¿por qué eso no se reflejó en el control remoto? Dado que, GIT es DVCS y debe ser idéntico en push / pull. [Considerando que soy el único desarrollador]

Tampoco pedí que lo creara. Hizo que la sucursal realizara mis cambios, los fusionó y luego eliminó la twig y empujó mi twig de desarrollo actualizada. Entonces, si detecta automáticamente la creación de esas twigs, ¿por qué no eliminarlas?

Dado que, GIT es DVCS y debe ser idéntico en push / pull.

No, eso no es realmente cierto. Se distribuye de modo que cada repository dentro de la networking contiene más o less los mismos datos, pero solo más o less. Cuando usa "empujar y tirar", especifica explícitamente lo que se está presionando.

git push remote branch solo empuja la twig del puntero de la branch al repository remoto y transfiere todas las confirmaciones que el repository remoto necesita para buildlo, pero no más. Esto significa que solo la confirmación a la que apunta la derivación y todos los padres son empujados hasta que el repository remoto encuentre un padre común que ya tiene (en el peor de los casos, esta es la confirmación cero especial, es decir, el padre vacío).

Del mismo modo, git pull remote branch solo obtiene los cambios necesarios para build la twig remote/branch localmente.

Para get todos los commits, puedes usar git fetch , y para presionar todas las twigs locales puedes usar git push --all . Pero, de nuevo, solo recupera / empuja las confirmaciones necesarias para build las twigs (o tags), no todo lo que tiene el repository.

Ahora, cuando insertas twigs en el repository remoto, solo actualizará las twigs que realmente empujaste, por lo que cuando borraste un control remoto local y --all , solo se presionarán tus twigs locales, y eso no incluye las eliminadas . Por lo tanto, su Git local ya no sabe qué twigs borró localmente (porque se fusionaron) y, como tal, no puede dar esa información al repository remoto automáticamente. Sin embargo, lo que puede hacer es indicarle al repository remoto cada twig que tiene localmente para que el control remoto pueda determinar cuál fue eliminado. Para ello, usa la opción --prune . Sin embargo, tenga en count que esto elimina todas las twigs que no existen localmente, por lo que podría causar problemas al trabajar con múltiples usuarios que empujan diferentes twigs pero no extraen las demás (de hecho, nunca lo probé).

Lo mejor es, obviamente, eliminar directamente las twigs eliminadas localmente:

 git push remote :branch