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