Skip to content

Instantly share code, notes, and snippets.

@kelvinst
Last active April 7, 2024 20:30
Show Gist options
  • Save kelvinst/331aff32508e2517afbd to your computer and use it in GitHub Desktop.
Save kelvinst/331aff32508e2517afbd to your computer and use it in GitHub Desktop.
Git alias - seja rápido, seja breve!

Git alias - seja rápido, seja breve!

Git freak como sou, precisava compartilhar algo útil sobre ele, claro. E, já que não vejo muito por aí o pessoal usando, resolvi falar dos alias do git! É um recurso que eu uso muito, e nunca entendi porque muitas pessoas não são adeptas. 😕

Pelo nome você já deve perceber que os alias no git são atalhos. Atalhos pro quê? São atalhos para comandos do git e até comandos shell se você quiser. E é bem fácil cadastrar um alias:

$ git config --global alias.st status

Com esse código, você cadastra um alias st para o subcomando status do git.

A opção --global quer dizer que o alias será aplicado no arquivo .gitconfig dentro do seu diretório home, e por isso o alias será aplicado em todos seus repositórios. Sem esta opção, o alias será aplicado no .gitconfig do repositório atual, logo só será aplicado apenas a ele.

Agora voltando ao alias. Criamos o alias st para o subcomando status certo? Como uso esse alias agora? Bem fácil:

$ git st
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean

Isso, como podem perceber, foi igual a executar o comando git status. Mas vamos a um exemplo de alias muito mais interessante que uso no dia-a-dia aqui:

$ git lg
*   ebd5ff6 (HEAD, origin/master, origin/feature/org-permissions, origin/HEAD, master) Merged in feature/rolify (pull request #21)
|\
| * 486b8a7 (origin/feature/rolify, feature/rolify) Updating seeds after rolify refactor
| * 12d24a7 Fixing problems on tests after rolify
| * 4afb86d Fixing problems after pipe permissions change
| * 1e57066 Fixing problems on phases factory
| * a8b72f1 Saving user roles instead of members of pipes
| * 6a19bf8 Fixing problems on pipe roles changes
:

O que é isso? Uma lista gráfica dos commits, com anotações de onde está o HEAD, e em que commit cada branch está apontando. Mas percebam que usei um alias lg.

Agora por que esse caso o alias é tão interessante? Olha qual o comando que eu teria que executar para conseguir esse mesmo resultado sem o alias:

$ git log --all --graph --decorate --oneline --abbrev-commit
*   ebd5ff6 (HEAD, origin/master, origin/feature/org-permissions, origin/HEAD, master) Merged in feature/rolify (pull request #21)
|\
| * 486b8a7 (origin/feature/rolify, feature/rolify) Updating seeds after rolify refactor
| * 12d24a7 Fixing problems on tests after rolify
| * 4afb86d Fixing problems after pipe permissions change
| * 1e57066 Fixing problems on phases factory
| * a8b72f1 Saving user roles instead of members of pipes
| * 6a19bf8 Fixing problems on pipe roles changes
:

Cansou até de ler não é? Pois é...

Ah, eu havia comentado que dá pra executar comando externo certo? Então, é só colocar ! na frente do código para seu alias e pronto:

$ git config --global alias.visual '!gitk'

Isso pode ser usado em subcomandos do git também para por exemplo executar dois comandos em sequência. Eu por exemplo uso muito esse alias aqui:

$ git config --global alias.ac '!git add -A && git commit'

Esse alias basicamente vai adicionar todos os arquivos que estiverem unstaged com um git add -A e logo depois abrir meu editor de commit message, tudo isso só com um git ac.

Lembrando tudo isso é salvo no seus arquivos de configuração do git, se você abrir um (pode ser o ~/.gitconfig por exemplo) você vai ver uma seção [alias]. Olha como a minha está:

[alias]
  co = checkout
  lg = log --all --graph --decorate --oneline --abbrev-commit
  cm = commit
  ac = !git add -A && git commit
  st = status -sb
  tags = tag -l
  branches = branch -a
  remotes = remote -v

Você pode editar esse arquivo à vontade, desde que você coloque opções válidas (não é difícil, é só lembrar de colocar ! em comandos que não são subcomandos do git). E claro, se você for alguém que não gosta de ter que ficar configurando essas coisas uma a uma a cada máquina que usa, guarde esse arquivo em algum lugar e pronto.

Sugiro um repositório com seus arquivos de configuração, é uma prática muito usada entre desenvolvedores.

@matthfaria96
Copy link

Eu não conhecia esta função de alias, nem sabia como usar.
Graças ao seu texto eu entendi como funciona e tenho bons motivos para a usar. Obrigado o/

@MarceloBonifazio
Copy link

MarceloBonifazio commented Jul 2, 2018

Esse link possui várias opções de aliases que também podem ser muito úteis no dia-a-dia

https://haacked.com/archive/2014/07/28/github-flow-aliases/

  co = checkout
  ec = config --global -e
  up = !git pull --rebase --prune $@ && git submodule update --init --recursive
  cob = checkout -b
  cm = !git add -A && git commit -m
  save = !git add -A && git commit -m 'SAVEPOINT'
  wip = !git add -u && git commit -m "WIP"
  undo = reset HEAD~1 --mixed
  amend = commit -a --amend
  wipe = !git add -A && git commit -qm 'WIPE SAVEPOINT' && git reset HEAD~1 --hard
  bclean = "!f() { git branch --merged ${1-master} | grep -v " ${1-master}$" | xargs git branch -d; }; f"
  bdone = "!f() { git checkout ${1-master} && git up && git bclean ${1-master}; }; f"

Lá possui uma explicação detalhada de pra que serve cada um

@lucasdutraf
Copy link

Parabéns pelo texto! Bem explicado mas ao mesmo tempo breve, muito bom!

@bernardoadc
Copy link

Conhecem alguma maneira de guardar os alias em um arquivo separado do resto das configurações? Queria ter um gist publico para os alias e um privado para as configs, por ex.

@ftuyama
Copy link

ftuyama commented Jun 5, 2019

@khullah A prática recomendada é salvar no .gitconfig:

[alias]
    amend = commit -a --amend    
    prev = checkout HEAD^1
    next = "!sh -c 'git log --reverse --pretty=%H master | awk \"/$(git rev-parse HEAD)/{getline;print}\" | xargs git checkout'"

@bernardoadc
Copy link

@ftuyama sim mas gostaria de um gitconfig só para os alias, separado do resto das configs, entende?

@thadeu
Copy link

thadeu commented Oct 23, 2019

pra executar com frases..

[alias]
        psh = push origin HEAD
        cm = checkout master
        st = status
        co = checkout
        cb = checkout -b
        undo = reset HEAD~1 --mixed
        amend = commit -a --amend
        ahead = "!sh -c 'echo branch is $(git rev-list --count origin/master..HEAD) commits ahead master'"
        behind = "!sh -c 'echo branch is $(git rev-list --count HEAD..origin/master) commits behind master'"

@douglasCajueiro
Copy link

Estou começando a estudar programação agora, e algumas vezes fica complicado lembrar ou simplesmente não fica prático escrever uma linha gigantesca.
Esse texto tá aendo uma grande ajuda pra usar o git de forma mais simples, valeu mesmo!!

@yulken
Copy link

yulken commented Aug 21, 2020

Ainda não conhecia essa funcionalidade e por isso configurava os aliases direto no bash. O problema seria a necessidade de reconfigurar esses aliases para cada máquina diferente que eu fosse acessar. É certo que isso vai me ajudar bastante daqui em diante. Muito obrigado!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment