10 Repositorios remotos

10.1 Qué es un remoto

Un remoto es simplemente un nombre corto asociado a la URL de otro repositorio. Al clonar, Git crea automáticamente un remoto llamado origin apuntando al repositorio del que se clonó.

git remote -v

Lista los remotos configurados y sus URLs.

git remote add nombre URL

Agrega un nuevo remoto.

10.2 git fetch: descargar sin mezclar

git fetch origin

Descarga los commits y referencias nuevas del remoto, actualizando las ramas de seguimiento remoto (por ejemplo, origin/main), pero sin modificar ninguna rama local ni el directorio de trabajo. Es la operación más segura para enterarse de qué cambió en el remoto antes de decidir qué hacer con esa información.

10.3 git pull: descargar y mezclar

git pull

Equivale a hacer git fetch seguido de una fusión (o, según la configuración, un rebase) entre la rama local y su rama de seguimiento remoto correspondiente. Es conveniente pero combina dos pasos en uno, lo que puede sorprender si el remoto tiene cambios que generan conflicto.

10.4 git push: subir cambios

git push origin main

Envía los commits de la rama local main al remoto origin, siempre que el remoto pueda aplicar esos commits como un avance rápido de su propia rama. Si el remoto tiene commits que la copia local no tiene, push es rechazado, y hace falta primero traer esos cambios (fetch/pull) e integrarlos.

10.4.1 Push forzado

git push --force-with-lease

Sobrescribe la rama remota con la versión local, aunque eso implique descartar commits que estaban solo en el remoto. Es necesario después de reescribir historia local (por ejemplo, tras un rebase o un commit --amend de un commit ya subido: see Reescribir la historia). --force-with-lease es más seguro que --force a secas: falla si alguien más subió cambios al remoto desde la última vez que se sincronizó, evitando sobrescribir trabajo ajeno sin darse cuenta.

10.5 Ramas de seguimiento

Una rama local puede configurarse para "seguir" a una rama remota, de forma que git pull y git push sepan con cuál sincronizar sin especificarlo cada vez. Al hacer git switch -c rama origin/rama, Git configura este seguimiento automáticamente.