Pitch: Git LGA (Logical Git Aliases) - mnemônicos fáceis de usar e memorizar
Fala, pessoal! Esse é meu primeiro post aqui no TabNews, e quero muito mostrar uma ferramenta que eu criei e uso todos os dias: o Git LGA (Logical Git Aliases).
É um conjunto de aliases para Git. Mas calma que não é qualquer tipo de alias! Tem muitas dessas coleções rolando por aí, mas eu sempre senti que havia um problema: a maioria dos atalhos são um tanto arbitrários e aleatórios: gco, gcam, gpf... você decora um e outro e o resto acaba tendo dificuldade de lembrar. No LGA, os aliases são mnemônicos e seguem todos a mesma lógica. Uma vez que você internaliza essa lógica, pode até conseguir adivinhar combinações para outros comandos de forma intuitiva.
Desde que comecei a usar fiquei bem mais rápido no terminal: os commits agora saem na velocidade da luz. E ainda acabei viciando o pessoal do trabalho 😂
Como usar?
Todos os aliases são estruturados da mesma forma: g (chama o Git) + prefixo (o comando) + sufixo (a inicial da flag). Assim acaba ficando gswc:
g sw c
│ │ └─ sufixo: c de --create
│ └───── prefixo: sw de switch
└──────── g: chama o git
gswc → git switch --create
O sufixo é opcional. Sem ele fica só o comando: gsw é git switch.
Aqui demonstrando na prática um fluxo bem comum, de uma branch nova até o momento de dar push. Fica assim:
$ gswc feature/login # git switch --create feature/login
$ gst # git status
$ gad src/login.php # git add src/login.php
$ gcmm "Adiciona tela de login" # git commit --message "..."
$ gpsh # git push origin HEAD
Viu? É muito intuitivo e tranquilo de usar: cm de commit, m de message; ps de push, h de HEAD. E se você curte digitar git, funciona sem o g também: git swc, git st.
Ao todo são 71 aliases, cobrindo add, branch, commit, checkout/switch/restore, diff, fetch/pull/push, log/show, merge/rebase, stash, status, cherry-pick e mais uns utilitários.
Esqueceu algum comando? git lga
No repositório tem o CHEATSHEET.md. Mas tem também uma colinha embutida na ferramenta! É só rodar git lga:
╔═════════════════════════════════════════════════╗
║ Git Aliases ║
╠═════════════════════════════════════════════════╣
║ ── C ── ║
║ cm │ commit ║
║ cmm │ commit --message ║
║ cma │ commit --amend ║
║ cmn │ commit --amend --no-edit ║
║ cmf │ commit --fixup ║
║ ... ║
╚═════════════════════════════════════════════════╝
E o lga em si nada mais é que outro alias, chamando um script:
lga = !~/.git-lga-help.sh
Como funciona?
Não tem plugin manager, nem framework, nem precisa de Oh-My-Zsh. São basicamente duas peças trabalhando em conjunto:
Um gitconfig separado, puxado via include
Os aliases estão em ~/.git-lga.gitconfig e entram no seu ~/.gitconfig por meio de um include.path:
git config --global include.path ~/.git-lga.gitconfig
Ou seja, o seu arquivo de config fica do jeito que está. Se você já tem um alias com o mesmo nome, o Git acaba elegendo a última opção definida na config, então se for de interesse dá pra sobrescrever qualquer comando desde que seja depois do include.
Versão pro PowerShell
No Linux, os aliases com g na frente vêm do git-lga.bashrc. No Windows, quem faz esse papel é o git-lga.ps1 (incluído no instalador).
Escolhas que valem comentar...
O psf usa --force-with-lease, não --force. O --force-with-lease barra o push se o remoto mudou desde o seu último fetch, então você não apaga sem querer algum commit que o colega acabou de subir. Já que é pra ter um atalho de três letras pra push forçado, tem que ser seguro, não acham?
Onde a regra tem umas pequenas exceções (colisões semânticas): tem vezes que a regra dos mnemônicos esbarra em problemas de letras repetidas, e não vou esconder isso:
sthoéstash pop, porque opjá ficou com ostash push(sthp).adaersasãoadd .erestore .. Não existe flag--allali, mas o "a de all" continua fácil de lembrar.chaechc(abort e continue do cherry-pick) fogem do prefixochppra ficarem curtinhos.
São poucas exceções, e pra elas sempre existe colinha.
Instalação
É bem simples: um comando só, que roda no Linux e no Windows. Se quiser conferir como instalar, clica aqui e dá uma olhada no GitHub.
Testem aí e me contem o que acharam ;)
Tenho certeza que vocês irão curtir! Se tiver algum alias que você usa direto e tá faltando na lista, comenta aí!