"Si tú no trabajas por tus sueños, alguien te contratará para que trabajes por los suyos”

Steve Jobs

Afiliado
Dominios3Euros

GIT DIFF

DEFINICIÓN:

Muestra los cambios en los ficheros en cualquier momento y desde donde queramos de la linea tiempo del árbol de trabajo de git. Con esto queremos decir que nos indica todos los cambios realizados sobre los archivos que pertenecen al repositorio.

Si te estas iniciando en Git puedes ver nuesta pequeña guia de git.

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:

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 repositorio remotos.

Ejemplos

Pondremos ejemplos prácticos.

Ver cambios que acabamos de realizar en un fichero

En nuestro repositorio tenemos index.php y queremos ver los cambios que hemos realizado que aun no los comitamos, tampoco los 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 instrucción en este caso tenemos que ponerle la opción --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 producción, 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, aunque esta vez, lo que pretendemos es que nos liste solo los ficheros que cambiaron entre las dos ramas, sin ver los cambios.

git diff --name-status RamaDesarrollo RamaProduccion

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

Los cambios en permisos de ficheros en git diff podemos indicar de verlo o no

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.Aunque también se puede convertir en un incordió, si trabajamos en varios servidores que necesitan mas permisos de los habituales para que funcione nuestro proyecto.

Nuestros crack en Git ( @Guillermo ) no pasa el siguiente comando para git dif no muestre esos ficheros.

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

El comando grep lo que hace es descartar 'mode change', de esta forma ya no tiene en cuenta los cambios de permisos.

 Me marca todos los saltos linea y final de carro como diferencias.

Si en proyecto trabajas con windows y linux a la vez, los saltos de carro pueden se un incordio, ya que windows siempre marca un salto de carro al pulsar intro y saltar una linea, y linux no lo hace, por este motivo git diff no 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, debemos buscar en nuestro editor, que nos marque los saltos de carro, para ver esas diferencias.

Una forma  rapida de ver los saltos de carros con la instrucción :

cat -A fichero

Nos muestra el salto de carro.

Diffuse como otro editor para ver diferencias en git.

En git hay una instrucción y se puede configurar para que podamos utilizar otro editor y ver la diferencia de una forma mas grafica.

Nosotros por ejemplo utilizamos diffuse, pero no hace falta cambiar nada en git, simplemente utilizar la consola.

diffuse fichero

Si el fichero fue cambiado y no fue añadido a commitear, ya nos habré las dos versiones.

Si ya añadimos entonces tenemos que poner:

diffuse -r fichero

Y si por ejemplo queremos mostrar la diferencia entre rama

diffuse -r rama fichero

Realmente a veces una forma grafica puede ser comoda, para encontrar diferencia en codigo.

 

 

Recomendable por -- para separar los parámetros de los ficheros

Fuentes

 Principalmente de http://git-scm.com/docs/git-diff

Comentarios  
Its like you read my mind! You appear to know so much about this, like
you wrote the book in it or something. I think that you could do with a few pics to drive the message home a
little bit, but other than that, this is fantastic blog.
A great read. I'll definitely be back.