Crea un alias para varios commands de git

Generalmente uso estos commands en la twig 'trabajo' con git

git commit -a -m "blah! blah!" git checkout master git merge work git checkout work 

He oído sobre los alias de git. ¿Es posible combinar todos estos commands en uno a través de alias o algo más?

Además de las respuestas a la pregunta duplicada publicada en los comentarios, también puedes poner un script de shell ejecutable llamado git-foo (por ejemplo) en algún lugar de tu PATH y acceder a él con git foo <args> como si fuera un Git nativo mando.

Esto podría ser útil si la lógica de su alias es demasiado larga para una sola línea en su file de configuration.

Por ejemplo:

 $ cat > ~/bin/git-foo #!/bin/bash echo "Foo: $1" ^C $ chmod +x ~/bin/git-foo $ git foo test Foo: test 

Como @ Will-Vousden sugiere, sería posible escribir un script de shell para hacer esto. Por ejemplo:

 #!/bin/bash git commit -a -m "$1" git checkout master git merge work git checkout work 

que llamarías como:

 $ git-commit.sh "Commit message in quotes" 

Sin embargo, este enfoque (o su propio alias) podría fallar fácilmente si hay, por ejemplo, un conflicto de fusión:

 $ git-commit.sh "Commit message in quotes" [work 1a6e17f] Commit message in quotes 1 file changed, 1 insertion(+), 1 deletion(-) Switched to branch 'master' Auto-merging file.txt CONFLICT (content): Merge conflict in file.txt Automatic merge failed; fix conflicts and then commit the result. file.txt: needs merge error: you need to resolve your current index first 

dejándote en la twig principal con un conflicto de fusión no resuelto.

Probablemente podría agregar algo de lógica en el script para detectar, y potencialmente solucionar, esos problemas, pero eso parece mucho más trabajo y esfuerzo que simplemente ejecutar los cuatro commands por separado.

También puede agregar lo siguiente a su file shell.rc:

gmm fusiona todas las twigs dadas con la que estás actualmente

invocar: gmm branch1-to-be-fusionado branch2-to-be-fusionado …

 gmm () { src=`git branch --no-color | grep "*" | cut -f 2` for i in $@ do git checkout $i git merge $src done git checkout $src }