Git Cookbook. Cambiar en nuestro repositorio local la rama del repositorio remoto que seguimos

Git

Para la elaboración de este artículo se ha utilizado la versión de git 2.7.4

Esta situación nos la encontramos cuando trabajamos con multiples repositorios remotos en nuestro repositorio local y en un momento determinado queremos dejar de seguir a la rama del repositorio remoto por defecto origin por otra rama de otro repositorio remoto diferente.

Para verlo con más claridad vamos a verlo con una secuencia de comandos.

Estado local de nuestro repositorio

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

Listado de los repositorios remotos

$ git remote -v
gitlab  ssh://... (fetch)
gitlab  ssh://... (push)
origin  ssh://... (fetch)
origin  ssh://... (push)

Cambiar el repositorio remoto por defecto al que seguimos

La opción -u es la misma que –set-upstream-to.

$ git branch -u gitlab/master
Branch master set up to track remote branch master from gitlab.

$ git status
On branch master
Your branch is up-to-date with 'gitlab/master'.
nothing to commit, working directory clean

A partir de este momento cada vez que hagamos cualquier operación con git donde interviene el repositorio, si no le indicamos nada, el repositorio por defecto donde se hace las operaciones es gitlab

Por ejemplo, cambiamos un fichero y hacemos un git push. Por defecto se va al repositorio remoto gitlab. Si no cambiamos el repositorio remoto por defecto al que seguimos, para enviar los cambios a origin tendriamos que hacer un git push origin master.

Vamos a seguir con la secuencia de comandos.

$ echo "Readme.md" > README.md
$ git add .
$ git commit -m "fichero readme"

# diferencia entre repositorio local y el remoto origin
#
$ git diff origin/master --name-only
README.md

# diferencia entre repositorio local y el remoto gitlab
#
$ git diff gitlab/master --name-only
README.md

# realizamos un push sin indicar el repositorio remoto. Los cambios van por defecto al repositorio *gitlab*
#
$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 299 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To ssh://...
   2c0999b..61dbe03  master -> master

# diferencia entre repositorio local y el remoto gitlab. En este caso no hay ninguna diferencia
#  
$ git diff gitlab/master --name-only

# diferencia entre repositorio local y el remoto origin. En este caso sigue existiendo el fichero modificado
#
$ git diff origin/master --name-only
README.md

# Subir los cambios al *origin* sin modificar el repositorio remoto que seguimos
#
$ git push origin master
Password authentication
Password:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 299 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1)
remote: Updating references: 100% (1/1)
To ssh://...
   2c0999b..61dbe03  master -> master

# Ya no existe diferencia entre repositorio local y el remoto origin.
#
$ git diff origin/master --name-only