¿Cómo puedo evitar comprometerme con la twig principal en git?

Mi flujo de trabajo ideal sería realizar cambios en dev y solo fusionar cambios en master a través de git merge --no-ff dev , pero ocasionalmente lo que sucede es:

En dev

 dev: git add . dev: git commit -m "Cunetworking cancer." dev: git checkout master master: git merge --no-ff dev 

Escribe un poco más de código

 master: git commit -a -m "Did something amazing" 

Whops, solo comprometido con dominar. Si tengo suerte, me doy count de inmediato, pero si no lo hago puedo empujar la twig aguas arriba con otros 10 cambios en la parte superior. Entonces esto termina en remoto:

 Master -------- Merge --- commit - commit --------------- Merge Dev \ Commit/ \ commit - commit / 

Mientras que debería verse así:

 Master -------- Merge ------------- Merge --------------------- Merge Dev \ Commit/ \ commit commit / \ commit - commit - commit / 

¿Cómo puedo eliminar el factor humano (es decir, mi estupidez) y dejar de comprometerme con la twig principal? Estoy en Ubuntu.

Solutions Collecting From Web of "¿Cómo puedo evitar comprometerme con la twig principal en git?"

Esta no es una solución a testing de balas, pero podrías instalar git-completion.bash y usar su mejora de PS1 para mostrar la twig actual (y otras cosas útiles) como parte de tu símbolo del sistema. Mira aquí para una explicación.

No le impedirá comprometerse con el maestro, pero le hará difícil olvidar en qué twig se encuentra.

Podría escribir fácilmente un enlace precompromiso para verificar su twig actual y rechazar la confirmación en function del nombre de la sucursal.

Intento configurar algo similar donde solo hudson se compromete, ya que fusionará la twig remota que se compromete con el maestro y luego los insertá en nuestro git Soooooo nuestro maestro principal solo es BUEN código y ningún desarrollador puede verse afectado por otro que rompa la construcción. ..Oh dia feliz.

secuencia de commands previa a la recepción (lado del server – no colocar localmente) ….

 #!/bin/sh # <oldrev> <newrev> <refname> # update a blame tree while read oldrev newrev ref do echo "STARTING [$oldrev $newrev $ref]" if [ $ref == "refs/heads/master" ] && [ $USER != "hudson" ] then echo "YOU CANNOT COMMIT STUFF TO MASTER BRANCH" echo "TO CORRECT THIS run" echo "git branch -c <branch name> then run" echo "git push <reponame> <branch name>" echo "and hudson will take and push to master IF it passes the tests" exit 1; else echo "This is hudson, allowing commit to master" fi done 

y luego, por supuesto, ODIO el sondeo así que después de la recepción, hago algo como esto (TEN EN CUENTA que el usuario hudson no puede ejecutar el command curl o terminas en un bucle infinito mientras sigue presionando los cambios que hace a la twig principal) …

secuencia de commands posterior a la recepción (lado del server, no colocar localmente)

 echo "User=$USER" if [ "hudson" != $USER ] then echo "Notifying hudson to build NOW" curl http://10.222.0.168:8080/job/stserver1/build?delay=0sec echo "Done notifying" else echo "This is hudson, not triggering build now" fi 

NOTA: No he encontrado la manera de que un desarrollador revierte su compromiso de dominar aunque :(. Todavía está trabajando en eso.