Git: denegar la eliminación de la twig remota a través de push (como receive.denyDeletes), pero solo si la twig no está completamente fusionada

Git denegará por defecto eliminar una twig local (a través de git branch -d mybranch ), si esa twig no está completamente fusionada.

Sin embargo, si git push origin --delete mybranch una twig remota a través de git push origin --delete mybranch , no hay ninguna advertencia si la twig no está completamente fusionada.

Esto parece bastante peligroso: alguien más podría haber enviado actualizaciones a la twig desde la última vez que la busqué, por lo que eliminar accidentalmente una twig no fusionada parece más probable para una sucursal remota que en el caso de una sucursal local.

Entonces, ¿por qué git no advierte si elimino una twig remota no fusionada? ¿Y hay alguna forma de advertirlo o negar la eliminación?

Nota: Me doy count de que idealmente debería git pull la twig antes de eliminarla y asegurarme de que esté completamente fusionada. Sin embargo, todos cometemos errores y me gustaría tener una networking de security.

Sin embargo, si elimino una twig remota a través de git push origen –delete mybranch, no hay ninguna advertencia si la twig no está completamente fusionada.

Mi respuesta sería "fusionarse con qué?" ¿ HEAD del control remoto? ¿La twig master ? ¿Algo más? La coincidencia de Git ref es más o less infinitamente configurable. Puede configurar múltiples controles remotos. Las sucursales de seguimiento en sentido ascendente no necesitan tener el mismo nombre que sus contrapartes locales. Incluso puede configurar múltiples twigs de seguimiento en sentido ascendente si sabe cómo (se llama extracción de "pulpo" y no hay ningún command de porcelana que le permita hacerlo).

git branch -d comtesting que la twig no se ha fusionado con su twig ascendente (algo que no existirá en un repository remoto) y luego, si no existe la stream ascendente, HEAD . La verificación de contraparte para un repository remoto no es tan obvia.

Por el comentario de kan, a continuación, uno también podría verificar si borrar una twig remota generó confirmaciones pendientes (por lo que una git branch -d más poderosa git branch -d ). Tampoco creo que haya ninguna protección de este tipo, y puede que no sea algo fácil de verificar en un control remoto con docenas o cientos de sucursales.

Lo mejor que puede hacer es evitar las eliminaciones por completo con receive.denyDeletes .

La respuesta de Christopher (upvoted) ilustra la diferencia entre un repo local (downstream) y un repo remoto (upstream).
Consulte " Definición de" en sentido descendente "y" en sentido ascendente " "

Un repository en sentido ascendente no sabe nada sobre ningún repository en sentido descendente, como su repository local.
Es (el repository en sentido ascendente) puede representar cualquier cosa (un repos remoto utilizado por muchos, o un repository temporal utilizado solo para comstackciones y testings).
Pedir al repository remoto que elimine una sucursal no debe estar restringido por ninguna característica de repository local (si lo fuera, todo lo que necesita hacer es tener otro repository local respetando cualquier restricción que desee aplicar: podría eliminar la sucursal remota, incluso aunque su primer repository local aún estaría en un estado incorrecto).

Sin embargo, eliminar una sucursal local en su repository local puede estar vinculado a la política local que desee seguir.