Introducción
Un remoto es una URL nombrada que apunta a otro repositorio Git. git clone crea uno llamado origin automáticamente, pero puedes añadir tantos como quieras. Los remotos son el puente entre tu repo local y el mundo exterior.
Listando e inspeccionando
git remote
git remote -v
git remote show origin
git remote show contacta al servidor y reporta los branches rastreados, reglas de push y refs obsoletas.
Añadiendo y eliminando
git remote add upstream https://github.com/original/widget.git
git remote rename upstream origin-upstream
git remote remove origin-upstream
El patrón fork-y-upstream es común: origin es tu fork, upstream es el proyecto del que hiciste fork.
Cambiando una URL
Si un proyecto se mueve de HTTPS a SSH o a un nuevo host:
git remote set-url origin [email protected]:example/widget.git
git remote -v
Múltiples URLs
Puedes hacer push a varios mirrors a la vez añadiendo URLs de push extra:
git remote set-url --add --push origin [email protected]:example/widget.git
git remote -v
Podando branches obsoletos
Cuando los branches se eliminan en el servidor, tus refs/remotes/origin/* locales pueden quedarse desfasados. Límpialos:
git fetch --prune
git remote prune origin
O configúralo permanentemente:
git config --global fetch.prune true
Inspeccionando el seguimiento
git branch -vv
# main a1b2c3d [origin/main] Latest fix
# feature/login e4f5g6h [origin/feature/login: ahead 2] WIP
-vv muestra el upstream de cada branch y cuán adelante/atrás está.
Reescritura con insteadOf
Si las URLs de un proyecto cambian (HTTPS a SSH, migración de host, o quieres que todas las URLs de GitHub usen SSH automáticamente), insteadOf las reescribe transparentemente:
git config --global url."[email protected]:".insteadOf "https://github.com/"
git config --global url."https://github-mirror.example.com/".insteadOf "https://github.com/"
Esto es especialmente útil en CI, donde puedes reescribir todos los clones a un mirror local con una línea de configuración, sin necesidad de editar scripts. La dirección inversa (pushInsteadOf) te permite hacer fetch por HTTPS pero push por SSH desde el mismo remoto.
Flujos triangulares
En código abierto, típicamente haces fetch desde upstream (el proyecto canónico) y push a origin (tu fork personal). Configura una vez y olvídate:
git remote add upstream https://github.com/project/repo.git
git config branch.main.remote upstream
git config branch.main.pushRemote origin
git config --global push.default current
Ahora git pull lee desde upstream y git push escribe a tu fork, automáticamente. La configuración remote.pushDefault aplica la regla a cada branch en un clon.
Errores comunes
Confundir el nombre de un remoto con su URL. origin es solo una etiqueta; puedes renombrarlo. Otra trampa: añadir la misma URL bajo dos nombres diferentes, y luego sorprenderse por refs duplicadas. Usa git remote -v para auditar. Olvidar hacer git fetch después de cambiar de red o cambiar URL deja tus branches de seguimiento desactualizados. Finalmente, en servidores compartidos, eliminar un ref de seguimiento remoto localmente (p.ej. git branch -dr origin/main) no elimina el branch en el servidor; usa git push origin --delete main para eso, y solo cuando realmente lo desees.