21 alias útiles para git

05/04/2019Artículo original

Todo aquel que use git sabrá que en ocasiones es un poco tedioso escribir los comandos a ejecutar. Para ello existen los alias, que nos permiten crearnos atajos a la hora de ejecutar un comando. En este artículo se recopilarán unos cuantos alias útiles para el día a día. Os animo a que comentéis vuestros preferidos para ir aumentando la lista!. Comencemos.

git ec

Como no, el primer alias tenía que ser uno que nos permita editar la configuración de git rápidamente:

git config --global alias.ec "config --global -e"

A partir de ahora, podremos abrir la configuración de git con nuestro editor por defecto con git ec.

El resto del artículo asumirá que se tiene la configuración abierta con un editor, los aliases se escribirán directamente en la sección [alias] de dicho fichero.

git co, br, cm, st

Estos aliases pretenden más que facilitar la escritura de checkout, branch, commit -am y status. Básicamente los comandos que más uso.

co= checkoutbr= branchcm= commit -amst= status

Veamos ahora una serie de aliases que he extraido de haacked:

Actualizar el directorio de trabajo

Para simplificar estos dos comandos

git pull --rebase --prunegit submodule update --init --recursive

en los que el primero obtiene los cambios desde el servidor, si se tienen commits locales, se ponen al principio de los descargados (rebase), y con prune se eliminan ramas que ya no existan en el servidor. El segundo simplemente actualiza recursivamente submódulos. El alias quedará:

up= !git pull --rebase --prune $@&& git submodule update --init --recursive

Este alias es algo distinto, la exclamación indica que se va a ejecutar un comando en la shell, es decir, podemos ejecutar cualquier comando, no solo de git. En este caso, se están ejecutando dos comandos git.

git save, git wip, git undo, git amend

Estos dos alias están destinados a cuando simplemente queremos guardar nuestros cambios, ya sea porque tenemos que irnos a hacer otras cosas, o simplemente no hemos acabado el trabajo y aún no tenemos un nombre para el commit adecuado. Con ellos, se guardan los cambios con un mensaje de commit SAVEPOINT o WIP, en función del alias que os guste más:

save= !git add -A && git commit -m 'SAVEPOINT'wip= commit -am "WIP"

Una vez volvamos a trabajar, simplemente ejecutamos el aliasundo, que elimina el último commit, pero deja intactos los cambios:

undo= reset HEAD~1 --mixed

O si simplemente queremos modificar el mensaje del commit, usamos el aliasamend:

amend= commit -a --amend

Resetear el directorio de trabajo adecuadamente, git wipe

Cuantas veces hemos comenzado a trabajar o intentar añadir algo al código y al final lo único que hicimos fue ensuciar todo el directorio, montones de líneas de código sin ordenar etc. Lo mejor en estos casos es descartar todo y volver a empezar. Para ello es posible usar git reset HEAD –hard, pero esto borrará todo, sin que quede constancia de lo que hicimos. Para descartar el código, pero que quede constancia de lo que hicimios, por si alguna vez nos hace falta, crearemos el aliaswipe:

wipe= !git add -A && git commit -qm 'WIPE SAVEPOINT'&& git reset HEAD~1 --hard

Hace un commit de todo lo que hay en el directorio de trabajo para luego hacer un hard reset y eliminar dicho commit. A pesar de ello, el commit seguirá ahí, en la historia del repositorio, aunque inalcanzable. Estos commits son un poco complejos de recuperar, pero al menos seguimos teniendo aquel trabajo del que no quedamos del todo convencidos. Quizá algún día recuerdes que necesitabas una línea de código que escribiste. Para recuperarlo hay que ejecutar git reflog y buscar el SHA del commit que tenga como mensaje “WIPE SAVEPOINT”.

  El developer feliz: qué buscamos y qué necesitamos

Alias para logs

Veamos ahora una serie de alias para mostrar los logs de los commits de distintos modos.

Mostrar commits de forma compacta y colores, git ls

21 alias útiles para git

El alias es el siguiente:

ls= log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate

Listar commits y ficheros modificados, git ll

21 alias útiles para git

El alias es el siguiente:

ll= log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat

Mostar commits de forma compacta y con fechas, git lds

21 alias útiles para git

lds= log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short

Si lo preferimos con fechas relativas, usaremos el aliasgit ld:

  Programación para Juegos - Lección 5

21 alias útiles para git

ld= log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative

Buscar ficheros y contenido dentro de ficheros (grep)

Para buscar ficheros con conteniendo el nombre indicado:

f="!git ls-files | grep -i"

Ejemplo:

$ git f oneP3/oneway/Utils.pyP3/oneway/__init__.pyP3/oneway/ej1.pyP3/oneway/ej2.pyP3/oneway/ej3.pyP3/oneway/ej4.pyP3/oneway/ej5.pyP3/oneway/ej6.pyP3/oneway/ej7.py

Para buscar contenido dentro de todo el repositorio:

grep= grep -Iigr= grep -Ii

Ejemplo:

$ git grep RabinP1/modularArith/ej4.py:def MillerRabin(p):P1/modularArith/ej4.py: print MillerRabin(90221078753392184154149622269679731705920869572364323146777389106744249167893287091491005751893264013854756094230384816436985035887367570198390830836626929620930395458607390051335962764852769424941031051670131521265969408350800112779692655340042253991970492761524977413231930703094065023050574077317620529581736775256036443993928340221545607375549860405933153255776836414051570996984167934585339322850189347872718439350738428272565094611168867981011370318335242028953808721309056435214502065537377043)

Para buscar desde el directorio raíz:

gra="!f() { A=$(pwd) && TOPLEVEL=$(git rev-parse --show-toplevel) && cd $TOPLEVEL && git grep --full-name -In $1 | xargs -I{} echo $TOPLEVEL/{} && cd $A; }; f"

Listar todos los aliases, git la

Ahora que ya llevamos unos cuantos aliases, quizá sean dificil de recordar hasta que nos acostumbremos, por ello, podemos crear un alias que liste todos los nuestros aliases :-):

la="!git config -l | grep alias | cut -c 7-"

Listar la última etiqueta, git lt

lasttag= describe --tags --abbrev=0lt= describe --tags --abbrev=0

Alias para hacer merges, git ours, git theirs

ours="!f() { git co --ours $@ && git add $@; }; f"theirs="!f() { git co --theirs $@ && git add $@; }; f"

Eso es todo, comentad vuestras alias para completar este artículo!

Recopilación

Aquí se muestran todos los alias vistos:

[alias]ec= config --global -e co= checkout br= branch cm= commit -am st= status up= !git pull --rebase --prune $@&& git submodule update --init --recursive save= !git add -A && git commit -m 'SAVEPOINT'wip= commit -am "WIP"undo= reset HEAD~1 --mixed amend= commit -a --amend wipe= !git add -A && git commit -qm 'WIPE SAVEPOINT'&& git reset HEAD~1 --hard ls= log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate ll= log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat lds= log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short ld= log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=relative f="!git ls-files | grep -i"grep= grep -Ii gr= grep -Ii gra="!f() { A=$(pwd) && TOPLEVEL=$(git rev-parse --show-toplevel) && cd $TOPLEVEL && git grep --full-name -In $1 | xargs -I{} echo $TOPLEVEL/{} && cd $A; }; f"la="!git config -l | grep alias | cut -c 7-"lasttag= describe --tags --abbrev=0lt= describe --tags --abbrev=0ours="!f() { git co --ours $@ && git add $@; }; f"theirs="!f() { git co --theirs $@ && git add $@; }; f"

Referencias

  Las 'stories' ya han llegado incluso a Visual Studio Code: una extensión nos permite mostrar nuestro código al resto de usuarios

Relacionados

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad