Agilidade e eficiência no git com oh-my-zsh

alexmoreno

Alex M.

Posted on May 28, 2019

Agilidade e eficiência no git com oh-my-zsh

Já dizia o FBI, Winners don't use GUI. Se você gosta daqueles negócio de git kraken, sublime merge, etc, tudo coloridinho e bonitinho, esse artigo não é pra você. Aqui só fica quem é hackudo com força, nerdão dos terminal, que quando garoto abria o cmd do windows e ficava digitando qualquer coisa na telinha preta até ter que formatar o windows pois apagou a system32 por acidente.

Você tá cansado de digitar os comandinho do git tudo, amiguinho? Seu workflow é orientado a git mas você não aguenta mais abrir o terminal pra ficar criando branch, dando comitinho e pushzinho? É um saco, né, digitar um monte de tralha e apertar tab várias vezes até achar a branch que você quer. Eu te entendo, eu também sofria disso. Sofria, pois agora com os poderes cabulosos do oh-my-zsh, meus problemas acabaram! Os seus ainda não, mas vão acabar assim que você ler esse artigo.

Primeiramente, instale o oh-my-zsh na sua máquina. Ele é lindo e você nunca mais vai querer trocar. Depois, leia com atenção os poderes que os plugins de git e git-flow dele possuem:

gcd && ggpull

Atalho para git checkout develop && git checkout origin git_current_branch, ou seja, acabou uma feature? Publicou, foi lá e fez o PR? Foi aceito, mergeado? Ótimo. Manda esse comando que sua develop já vai refletir a develop remota. Dependendo do seu fluxo essa pode ser a forma mais eficaz (caso você possa ir lá e aceitar o seu próprio PR por qualquer razão) ou não (precisa de um code review, precisa que alguém aceite o PR, etc.) antes de começar a trabalhar em outra feature.

gapa [&& gc]

Atalho para git add --patch (ou simplesmente -p). Olha, se você se sente confortável usando git commit -a, beleza. Mas eu sugiro que você dê uma olhada em como funciona o --patch ou -p, porque ele te dá um nível de controle incrível do que vai pra stage ou não. Depois que eu me acostumei a usar as letrinhas do comando, só uso isso agora. Ou dou gapa ou dou gc -p (git commit -p, infelizmente o plugin de git do ohmyzsh não tem plugin nativo para git commit -p, e gcp já se refere à git cherry-pick)

gcb nome-da-branch

Atalho para git checkout -b nome-da-branch. A agilidade que esse comando te dá é ótima. Nunca mais digitar git checkout branch e perceber que esqueceu a flag, daí reescrever o comando ou apertar setinha pra cima, colocar o cursor no lugar certo, digitar -b e dar enter. Com esse comando, não tem erro. Curto, prático e eficaz.

gcam "mensagem do commit"

Atalho para git commit -am ""mensagem do commit". OK, eu não aconselho você a usar esse comando, mas caso você viva la vida loka, full XGH, boladão sem freio, go fast break things, manda bala. Confesso que já usei muito, mas graças a Ancient Apparition me livrei desse mal que me afligia.

/ggpu(sh|ll)/

Atalho para git push origin git_current_branch e git pull origin git_current_branch, respectivamente. Esse, assim como o gcb, foi um dos comandos que mais fiquei feliz de aprender. Nunca mais precisar digitar as 2 primeiras letras do nome da branch e ficar apertando tab até achá-las! Nunca mais se perder! Hooray, agilidade!

gcm

Um dia eu fui um jovem plebeu que commitava coisas na master. Daí eu passei a criar branches a partir da master. Hoje o git frô me apresentou a solução e o caminho da luz para muitos problemas que me assolavam. Mas caso você ainda necessite ir até a master frequentemente, gcm é a forma mais ágil para isso.

ggu

Atalho para git pull --rebase origin git_current_branch Se você é do #TeamRebase, esse comando é seu novo amorzinho. ggu e pronto. Tá na mão, garotchenho.

gl e gp

Atalhos para git pull e git push. Versatilidade com rapidez. Depois de gl e gp, você pode argumentar à vontade com seu comando e ter o melhor dos dois mundos na ponta dos seus dedos.

gdba

Atalho para git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d Rapaz, use esse comando com cuidado. Ou não, como a gente bem, sabe, deu merda no git? cd ..... Esse comando joga fora toda a louça descartável que tá na pia, seu preguiçoso! Nem pra jogar os copinhos descartáveis fora, tsc tsc... Todas as branches que já foram mergeadas, exceto master, develop e dev (me corrigam se estiver errado), são apagadas, mas apenas em local. Ou seja, adeus pilha de branches velhas em local!

gc!

Atalho para git commit -v --amend. Um clássico. Digitei a mensagem errada e só percebi depois que saí? gc!, corrige, salva e sai. Quanto mais disléxico, mais útil.

glo

Atalho para git log --oneline --decorate. Ver todos os commits em oneline, com hash, merge e corzinha. Inclusive, eu sugiro que você teste e dê uma boa olhada em todos os possíveis atalhos para git log. Definitivamente vale a pena o tempo investido.

gsta e gstaa

Atalho para git stash push e git stash apply. Respectivamente, coloca tudo na stash mais recente, e pega a stash mais recente e aplica de volta ao projeto. Muito útil quando você tem problemas pra trocar de branch because you left some unstaged changes

gwch

Atalho para git whatchanged -p --abbrev-commit --pretty=medium. git whatchanged é bem parecido com ´git log´ mas vai mostrando os arquivos que foram alterados em cada commit. A flag -p faz com que as alterações dentro do código sejam exibidas também. --abbrev-commit mostra a hashzinha e --pretty=medium é uma formatação de commit. Uso ele mais raramente, mas é bom saber que existe quando preciso.

Seus próprios aliases

Eu absolutamente encorajo (e confesso que devia fazer mais também) seus próprios atalhos usando os comandos do zsh. Tem qualquer sequência de comandos que você digita frequentemente? Vai lá e faz um alias pra eles juntos. Sabe aqueles git log ou git status customizados que você adora usar? alias neles. Você pode fazer no arquivo do seu shell (.zshrc) ou no seu git, usando git config. Eu prefiro deixar nos meus dotfiles, pois fica mais fácil de carregar pra lá e pra cá. Por exempl, eu gosto de git log --oneline --decorate --no-merges, então deixo um alias gl=comando lá no fim do meu ´.zshrc´
Faça os seus também, cada keystroke a menos que você dá, é menos uma keystroke que leva para você se tornar um legítimo hack3rboy.

Ah, mas o git flow?

Que bom que perguntou. A gente tem agilidade pro git flow também, que também é agilidade. Recursive agilidade. Caraca.

Você precisa instalar o plugin do git flow no seu zsh.

Olha, esse dá pra gravar todo na cabeça simplesmente entendendo como funciona o esquema de abreviação deles.
Os comandos básicos:

g => git

fl => flow

Os tipos de branch:

f => feature

h => hotfix

r => release

Os comandos específicos do gitflow:

s => start

f => finish

p => publish

Logo, se eu quiser dar um git flow feature start nome-da-branch, é só eu dar g + fl + f + s, ou seja, gflfs. Memela na pepela, meus camaradas.

Agilidade na prática

git flow já deixa as coisas super simples para produzir algo na sua codebase. Olha só como, depois de ter os atalhos na ponta da língua, as coisas ficam ágeis para subir uma feature.

  • Primeiro, gflfs nome-da-feature para iniciar a feature.
  • Depois, codar.
  • Terminou? gapa && gc (ou gc -p).
  • Fez o commit? Tudo certo? gflfp publica em remote automaticamente, tudo certinho.
  • Sua branch remota foi aprovada e mergeada na develop remota? gcd && ggpull, e sua local já tá atualizada.

Pimba. Mais fácil que isso, só um clone seu fazendo isso por você.

E aí, tem alguma coisa pra adicionar? Futucou o git.plugin.zsh e achou alguma coisa útil que você usa bastante mas não tá no artigo? Deixa nos comentários, que quem achar esse artigo depois, vai ler ele com merge do seu conhecimento.

💖 💪 🙅 🚩
alexmoreno
Alex M.

Posted on May 28, 2019

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related