¿Hay alguna manera de evitar que dos twigs se fusionen en git?

Me gustaría poder mantener dos twigs separadas en un repository de git que no se puedan fusionar accidentalmente aunque las twigs puedan contener contenido similar.

¿Hay algún truco para obligar a una twig a permanecer separada en git? Eso es suponiendo que tengo twig A y twig B , algo así como git merge B //assuming A is checked out fallaría.

La preocupación aquí surgió porque al crear un repository de un website que estoy desarrollando necesito que el HEAD de la twig principal sea ​​siempre el estado actual del website estable.

Cualquier compromiso de desarrollo que necesite ocurrir en la twig de desarrollo con twigs de tema fuera de la twig de desarrollo si es necesario.

  C1-C2 master \ C3-C4-C5-C6-C9-C10-C11 development \ C7-C8-C12 topic/HEAD 

Necesito asegurarme de que hay pocas posibilidades de una fusión accidental entre la twig principal y otras twigs.

Así que estoy buscando una forma de "intercalarme" entre una fusión con la twig principal y preguntar: "Esta fusión se activará en el sitio, ¿estás seguro de que quieres hacerlo?" Y solo después de confirmar la fusión pasará.

Supongo que este escenario es relevante solo para desarrolladores web con código que no necesita comstackrse para poder ejecutarlo, y puede extraer copys del website estable en una installation en vivo.

Creo que la única forma en que puedes lograr esto es con un gancho precompromiso . De la página de manual:

Este enganche es invocado por git commit, y puede ser anulado con la opción –no-verify. No requiere ningún parámetro, y se invoca antes de get el post de logging de compromiso propuesto y realizar una confirmación. Salir con un estado distinto de cero de este script hace que el commit git aborte.

Entonces, si realmente lo desea, puede escribir un enlace precompromiso que verifique la twig actual y la twig que está intentando fusionar, y salga con un estado distinto de cero si es el par que no desea. Fuera de mi cabeza, la única forma en que puedo pensar para verificar qué twig estás intentando fusionar es examinar el file .git/MERGE_MSG y analizar la primera línea. (La alternativa, .git/MERGE_HEAD le dirá el SHA1 que está fusionando, pero sin logging de qué twig era, por lo que si dos twigs están en el mismo lugar, no tiene suerte.

El enlace precompromiso obviamente no se ejecuta para fusiones de avance rápido; Dudo que haya realmente alguna manera de protegerse contra eso. Pero, presumiblemente, si evita que las twigs se fusionen, nunca habrá un bash de avance rápido.

Tenga en count que una combinación de git con confirmación automática no llamaría al enganche pre-commit . Consulte " git merge auto-commit no activa el enganche pre-commit "

Merge llama a commit_tree directamente, de modo que los enganches de confirmación estándar son anulados.

Un parche está en progreso.