Complementando:
Note que o primeiro alias que vc criou foi alias g=git
. Então ele poderia ser usado nos demais:
alias g=git
# os próximos podem usar o primeiro alias
alias ga='g add'
alias gaa='g add --all'
# etc...
Neste caso meio que dá na mesma (exceto talvez pela "economia de caracteres", que nem acho um fator tão importante assim). Isso faz diferença em casos em que vc sempre chama o comando com algum parâmetro (por exemplo, alias c='comando --op1 --op2
e depois alias c1='c acao'
, pois aí garanto que o comando sempre será chamado com as opções desejadas). Como não é o caso aqui, não faz tanta diferença, foi só pra citar que é uma possibilidade.
Só que tem outro ponto que acho mais relevante. Vc está criando aliases do Bash, mas existe outra alternativa, que é criar aliases dentro do próprio Git. E tem uma diferença importante, que citarei em detalhes no final.
Git aliases
Em vez de criar aliases no shell, vc pode criar dentro do próprio Git. Os detalhes estão na documentação, mas abaixo segue um pequeno resumo.
No seu caso, em vez de alias ga='git add'
, você poderia fazer algo como:
git config alias.a add
Isso adicionará o alias no arquivo .git/config
do seu repositório local:
[alias]
a = add
Assim, sempre que eu chamar git a
, ele entenderá que na verdade estou chamando git add
. Da mesma forma, basta fazer git config alias.aa "add --all"
, assim git aa
equivale a git add --all
.
E se quiser, pode usar git config --global
para alterar a configuração global, assim os aliases ficarão disponíveis em todos os repositórios locais que estiverem na sua máquina.
E claro, vc também pode editar o arquivo de configuração diretamente (.git/config
para um repositório específico, ou ~/.gitconfig
para a configuração global).
Diferença importante
Como já disse, há uma diferença importante, e que faz com que eu prefira esta opção: o auto complete. Usando aliases do Bash, vc não terá o auto complete do Git disponível.
Por exemplo, usando meu alias que criei acima (git a
para git add
): se eu digitar git a --
e TAB duas vezes, serão mostradas as opções do git add
:
$ git a --
--all --edit --ignore-missing --interactive --patch --refresh --update
--chmod= --force --ignore-removal --no-... --pathspec-file-nul --renormalize --verbose
--dry-run --ignore-errors --intent-to-add --no-dry-run --pathspec-from-file= --sparse
Agora se eu usar o seu alias: ga --
e TAB duas vezes, nada acontece. Isso porque o auto complete do Bash está tentando verificar se existe alguma opção para o comando ga
, e no caso não tem, por isso ele não mostra nada. Quando eu uso git a
, o auto complete do Git procura pelas opções do git add
(pois ele entende que o comando a
é um alias e sabe onde procurar).
Além disso, o auto complete do Git é bem esperto e age de acordo com o contexto. Por exemplo, se digitar git add
, espaço e TAB duas vezes, ele mostra somente os arquivos que ainda não foram adicionados. Enquanto que se fosse usar o auto complete do Bash (ga
, espaço e TAB duas vezes), ele mostra todos os arquivos. Além disso, o Git mostra as opções e seus valores (por exemplo, git log --format=
e TAB duas vezes mostra somente os valores que a opção --format
aceita, o que não acontece com o alias do Bash, etc).
Até existem formas de contornar isso (ver aqui e aqui), mas eu prefiro usar os aliases do próprio Git para não precisar desta configuração adicional (além de não poluir os aliases do próprio Bash).
Mas claro que a escolha vai de cada um, o importante é saber que existem alternativas, e aí cada um escolhe o que achar melhor. Eu prefiro os Git aliases porque uso bastante a linha de comando, e o auto complete agiliza bastante as coisas.
Obs: quando digo "auto complete do Git", na verdade é um script que usa o comando complete
, e que roda dentro do próprio Bash (e que pode ou não vir junto com a instalação do Git - no caso do Git Bash, se não me engano, já vem). Este script contém todas as regras para que o auto complete seja esperto e sensível ao contexto, mas no fundo ele também está rodando dentro do mesmo shell. Eu só usei o termo "auto complete do Git" para diferenciar o caso em que estou usando um alias do Git e não do Bash. Espero não ter ficado confuso.