2026-03-16

Se você usa o plugin git do Oh-My-Zsh, provavelmente já se acostumou com os aliases gcm (checkout main) e gcd (checkout develop). Até que você entra num projeto com branches default diferentes e vê isso:
gcm
error: pathspec 'master' did not match any file(s) known to git
gcd
error: pathspec 'develop' did not match any file(s) known to git
Na empresa onde trabalho, usamos um sistema de branches diferente do convencional: a branch principal se chama staging (equivalente à main) e a branch de desenvolvimento se chama qa (equivalente à develop). Isso faz com que os aliases do Oh-My-Zsh não encontrem as branches esperadas.
O plugin git do Oh-My-Zsh usa duas funções para resolver o nome das branches default: git_main_branch e git_develop_branch. Todos os aliases que dependem dessas branches (como gcm, gcd, grbm, gmd, entre outros) chamam essas funções por baixo dos panos.
A solução é sobrescrever essas funções para incluir os nomes alternativos das suas branches. Criei um arquivo custom-git.zsh no diretório custom do Oh-My-Zsh:
# ~/.oh-my-zsh/custom/custom-git.zsh
Com o seguinte conteúdo:
# Overwrite Oh-My-Zsh git_main_branch function to also look up to default branch "staging"
git_main_branch() {
command git rev-parse --git-dir &>/dev/null || return
local ref
for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,master,staging}; do
if command git show-ref -q --verify "$ref"; then
echo "${ref:t}"
return
fi
done
echo master
}
# Overwrite Oh-My-Zsh git_develop_branch function to also look up to default branch "qa"
git_develop_branch() {
command git rev-parse --git-dir &>/dev/null || return
local ref
for ref in refs/{heads,remotes/{origin,upstream}}/{develop,dev,devel,development,qa}; do
if command git show-ref -q --verify "$ref"; then
echo "${ref:t}"
return
fi
done
echo develop
}
O Oh-My-Zsh carrega automaticamente qualquer arquivo .zsh dentro de ~/.oh-my-zsh/custom/, então basta reabrir o terminal e os aliases voltam a funcionar.
As funções percorrem uma lista de nomes possíveis (tanto em branches locais quanto remotas) e retornam o primeiro match. A ordem importa: se o repositório tiver main e qa, vai usar main. Se só tiver qa, vai usar qa.
Isso significa que o mesmo setup funciona tanto nos seus projetos pessoais (que usam main/develop) quanto nos projetos da empresa (que usam qa/staging), sem precisar trocar nada.