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

Git Cookbook, diferencias entre el directorio de trabajo la staging area y el repositorio local

Git

Como sabemos cada vez que hacemos una modificación de un fichero y lo damos por bueno, lo siguiente que hacemos es presentarlo a la staging area. Finalmente cuando terminamos con todas las modificaciones lo subiremos al repositorio local realizando un commit.

Vamos a ver el uso del comando git diff para ver los cambios de 1 fichero en cada una de estas fases.

git diff, muestra los cambios realizados en nuestro directorio de trabajo y que todavía no han sido presentados en la staging area.

git diff –cached, muestra los cambios presentados en la staging area y que todavía no hemos realizado el commit en nuestro repositorio local.

git diff HEAD, muestra los cambios realizados en nuestro directorio de trabajo con respecto al repositorio local.

Ejemplo

En el siguiente ejemplo vamos a ver el comportamiento y la salida de cada uno de estos comandos.

Sigue leyendo

Git Cookbook, diferencias entre ficheros del repositorio local y remoto

Git

Una vez hemos hecho cambios en nuestro working directory, los pasamos a la staging area y finalmente hacemos el commit en nuestro repositorio local. Como paso final mandaremos los cambios locales de nuestro repositorio local al repositorio remoto.

En este punto a veces nos interesa saber los cambios que hemos realizado de alguno de nuestros ficheros o de todos ellos con respecto a la versión que tenemos en el repositorio remoto. El comando que hace esto es el siguiente.

Ver todas las diferencias entre el repositorio local y el repositorio remoto

$ git diff origin/master

Ver todas la diferencia de un fichero entre el repositorio local y el repositorio remoto

$ git diff origin/master:PATH_TO_FILE_REMOTE PATH_TO_FILE_LOCAL
$ git diff origin/master README.md
$ git diff origin/master:README.md README.md