Agilidade e eficiência no git com oh-my-zsh
Alex M.
Posted on May 28, 2019
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
(ougc -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.
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
November 29, 2024