2026-03-16

Si usas el plugin git de Oh-My-Zsh, probablemente ya te acostumbraste a los aliases gcm (checkout main) y gcd (checkout develop). Hasta que entras en un proyecto con branches default diferentes y ves esto:
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
En la empresa donde trabajo, usamos un sistema de branches diferente del convencional: la branch principal se llama staging (equivalente a main) y la branch de desarrollo se llama qa (equivalente a develop). Eso hace que los aliases de Oh-My-Zsh no encuentren las branches esperadas.
El plugin git de Oh-My-Zsh usa dos funciones para resolver el nombre de las branches default: git_main_branch y git_develop_branch. Todos los aliases que dependen de esas branches (como gcm, gcd, grbm, gmd, entre otros) llaman a esas funciones por detrás.
La solución es sobrescribir esas funciones para incluir los nombres alternativos de tus branches. Creé un archivo custom-git.zsh en el directorio custom de Oh-My-Zsh:
# ~/.oh-my-zsh/custom/custom-git.zsh
Con el siguiente contenido:
# Overwrite Oh-My-Zsh git_main_branch function
# to also look up default branch "qa"
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,qa}; 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 default branch "staging"
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,staging}; do
if command git show-ref -q --verify "$ref"; then
echo "${ref:t}"
return
fi
done
echo develop
}
Oh-My-Zsh carga automáticamente cualquier archivo .zsh dentro de ~/.oh-my-zsh/custom/, así que basta con reabrir la terminal y los aliases vuelven a funcionar.
Las funciones recorren una lista de nombres posibles (tanto en branches locales como remotas) y devuelven el primer match. El orden importa: si el repositorio tiene main y qa, va a usar main. Si solo tiene qa, va a usar qa.
Eso significa que el mismo setup funciona tanto en tus proyectos personales (que usan main/develop) como en los proyectos de la empresa (que usan qa/staging), sin necesidad de cambiar nada.