¿Rastreo de sucursales en el repository de git simple?

Supongamos que tengo tres twigs en un repository central de Git (como GitHub):
-devo
-uat
-pinchar

prod es lo que se implementa en la producción pública, uat es una copy interna de la producción (ejecuta el próximo candidato de lanzamiento), y devo tiene los últimos desarrolladores de código que realizan testings de integración de forma interna.

Me gustaría hacer cumplir ese devo> uat> prod. Lo que significa que devo se basa en uat y uat se basa en prod. La idea es tener (principalmente) historial lineal de confirmaciones que se promuevan desde devo-> uat-> prod, networkinguciendo la cantidad de divergencia entre las twigs (y, por lo tanto, el número de errores que entran en producción que dependía de un código que no funcionaba) llegar a prod)

Puedo lograr esto con rebase manualmente, creando copys locales de cada twig que rastrea la versión remota y siendo muy cuidadoso con la forma en que selecciono (o fusiono) los compromisos para promocionarlos a la siguiente etapa y rebase cada twig individualmente antes de presionar.

Esto funciona, pero es tedioso y propenso a errores. Lo uso para mis sucursales, pero presentar a un equipo para usar el mismo sistema y confiar en que nadie comete un error (especialmente los que no están muy familiarizados con git) sería esencialmente imposible.

¿Hay alguna manera de decirle a Git que deseo este tipo de seguimiento, por lo que puede ayudar a aplicarlo con múltiples desarrolladores que se comprometan con todas estas twigs? ¿Puedo decir al repository desnudo en el server que sus twigs se rastrean entre sí (como puedo con las sucursales locales en mi repository personal de git)?

No sé mucho acerca de los scripts de gancho, pero podría imaginarme uno que posiblemente se ocupe del caso feliz (eligiendo un compromiso de devo -> uat y rebasingando devo sobre el nuevo uat), aunque entonces ¿qué pasa si hay un conflicto? ?

He buscado configuraciones similares, pero parece que no puedo encontrar las palabras key correctas, ya que la "twig de seguimiento remoto" significa realmente una twig local que rastrea una remota.

Ideas? ¿Pensamientos?
¡Gracias!

Creo que la mayoría de las veces este flujo se logra usando Jenkins / Hudson u otros serveres de CI … Podrías decirle a los desarrolladores que solo envíen a dev , Jenkins toma ese código y en una testing exitosa empuja el código a uat y si otro trabajo ( pepino o time u otros criterios) se cumple lo empuja hacia prod .

El único problema es que no conozco ninguna forma de bloquear esas dos twigs, solo Jenkins puede presionar. Algunos serveres de Git, como GitLab, brindan esa funcionalidad para bloquear las sucursales solo para el empuje de counts con privilegios.