Parece que incluso la respuesta actualmente aceptada no aborda realmente la parte de su pregunta sobre cómo evitar que alguien acceda accidentalmente a una confirmación anterior, use ese estado anterior de la base de código en una nueva rama y, por lo tanto, vuelva a introducir una vulnerabilidad anterior.
En mi humilde opinión, la única forma correcta de abordar esto es:
al documentar cualquier corrección de errores y correcciones de vulnerabilidad rígidamente en el documento de "notas de la versión" (o "registro de cambios") del sistema
asegurándose de que todos los desarrolladores que acceden a versiones anteriores del código se aseguren de leer las notas de la versión, verificar qué problemas se han resuelto en la versión del código que vino después del que van a usar
Cuando se reutiliza una versión anterior, o se ramifica desde una versión anterior de la base de código, es claramente responsabilidad de los desarrolladores no hacerlo a ciegas. Está claro que deben verificar los errores y vulnerabilidades ya corregidos, para no volver a introducirlos. Sin embargo, el registro de VCS no es realmente un buen lugar para encontrar este tipo de información, porque generalmente se mencionan todo tipo de cambios, en un nivel de abstracción demasiado bajo.
Sin embargo, las notas de la versión deben contener una sección de "nuevas características" y una sección de "problemas resueltos". Y este último debería ser el primer lugar para verificar antes de ramificarse de una versión anterior.