GIT DIFF

DEFINICIÓN:

Muestra los cambios en los ficheros desde donde quereamos hasta donde queramos en el arbol de trabajo ( la línea de tiempo de trabajo).

SINOPSIS

git diff [options] [<commit>] [--] [<path>…​]
git diff [options] --cached [<commit>] [--] [<path>…​]
git diff [options] <commit> <commit> [--] [<path>…​]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

OPCIONES:

 Información recopilada principalmente de http://git-scm.com/docs/git-diff

git diff [--options] [--] [ ...]

Con el anterior esquema podemos ver los cambios que han realizado en relación con el índice (zona de espera para la próxima confirmación). En definitiva, ver las diferencias, pero no solo las que esperan confirmación sino con otros puntos, branch o incluso con resositorio remotos.

Ejemplos

Pondremos ejemplos practicos.

Ver cambios que acabamos de realizar en un fichero

En nuestro repositorio tenemos index.php y queremos ver los cambios que hemos realizado y aun no lo comitamos ni preparados para comitear.

git diff index.php

 Nos muestra por la terminal los cambios que realizamos en ese fichero con respecto al HEAD de nuestro repositorio local.

Ver cambios de un fichero cuando ya lo añadimos (add) y esta preparado para commit.

La instruccion en este caso tenermos que ponerle la opcion --cached

git diff --cached index.php

 

Ver cambios en un fichero con respecto a otra rama

Si tenemos dos ramas en repositorio local, una desarrollo y otra produccion, entonces queremos saber que cambios realizamos en un fichero determinado de la rama de desarrollo con respecto a producción.

git diff RamaDesarrollo RamaProduccion /rutaFichero

Nos muestra por terminal la diferencia de los ficheros.

Ver que ficheros cambiaron entre esas ramas.

Es similar a lo anterior, pero no es lo mismo, lo que pretendemos es que nos liste solo los ficheros que cambiaron entre las dos ramas.

git diff --name-status RamaDesarrollo RamaProduccion

Nos va indicar aquellos modificados (M) , añadidos (A) o incluso aquellos movidos...  Rnumero.. pero no estoy seguro... :-)

Git diff - Cambian permisos

Cuando cambiamos permisos a un fichero dentro un repositorio git este detecta que se cambio y lo marca como modificado. Al hacer git diff, nos indica los permisos que tenía y que tiene ahora.

Esto puede ser muy buenos para controlar que no nos cambien los permisos de nuestro proyecto si nuestro control, pero también se puede convertir en un incordió.

Se puede convertir en incordió cuando trabajamos con un proyecto en servidores que necesitan otro tipo de permisos de los que nosotros ponermos habitualmente en nuestros servidores, para ello preguntamos como lo podemos evitar.

Nuetros crack @Guillermo no pasas el siguiente comando.

git diff --summary master | grep -v 'mode change'

El grep lo que hace es descartar 'mode change'.

De esta forma ya no tiene en cuenta los cambios de permisos.

Trabajar con windows y linux en el mismo proyecto.

Esto realmente puede convertirse en una agonía, ya que windows el salto de carro lo marca con M$ y linus solo $, esto hace que si cambiamos el fichero con windows, nos va decir que tenemos diferencias en todo el fichero.

Al hacer git diff del fichero, no sabemos porque hay diferencias, ya marca borrado todo el fichero y en verde todo el fichero.

Si vemos el fichero y version anterior con un editor grafico no vemos diferencias. Nosotros por ejemplo utilizamos diffuse

diffuse -r fichero

Cuando nos sucede esto, ya pensamos en eso y entonces le indicamos al editor que marque los saltos de carro...

Una forma  rapida de ver los saltos de carros con la instruccion :

cat -A fichero

Nos muestra el salto de carro.