2011-04-07 9 views

Respuesta

232

que puede hacer:

git diff master~20:pom.xml pom.xml 

... para comparar su actual pom.xml a la de hace 20 master las revisiones a través del primer padre. Puede reemplazar master~20, por supuesto, con el nombre del objeto (SHA1sum) de una confirmación o cualquiera de los many other ways of specifying a revision.

Tenga en cuenta que esto es en realidad comparar el anterior pom.xml a la versión en su árbol de trabajo, no la versión confirmada en master. Si desea que, a continuación, puede hacer lo siguiente en su lugar:

git diff master~20:pom.xml master:pom.xml 
+8

Tenga en cuenta que esto no solo funciona para archivos, también funciona para (sub) directorios, por ejemplo 'git diff : foo/HEAD: foo /'. –

+2

También tenga en cuenta que en Windows necesita utilizar barras diagonales para directorios si está utilizando un especificador de revisión o git le dará un error sobre el archivo/directorio que no existe en esa revisión. –

+1

@DylanNissley o no le dará ningún error ni diferencia. Eso es lo que veo. En cualquier caso, gracias por la sugerencia sobre el uso de barras diagonales en lugar de barras diagonales inversas. –

107
git diff <revision> <path> 

Por ejemplo:

git diff b0d14a4 foobar.txt 
+0

no funciona para la versión 1.7.11 si el archivo no está en el directorio actual. Ejemplo: 'git diff f76d078 test/Config' yields 'error: No se pudo acceder' test/f76d078 '" – simpleuser

+1

@ user1663987 simplemente pase una ruta completa en relación con la raíz del proyecto:' git diff root/path/file'. –

+1

test/Config * es * relativo a la raíz (como en la prueba es un subdirectorio de la raíz). pero entonces su ejemplo raíz/ruta/archivo parecería INCLUIR la raíz? – simpleuser

30

Si quieres ver la diferencia entre la última confirmación de un solo archivo que puede hacer:

git log -p -1 filename 

Esto le dará la diferencia del archivo en git, no está comparando su archivo local.

+0

esto no devuelve nada –

+0

@AndreiCristianProdan Entonces no tiene cambios allí. Puedes incrementar el '-1 'paso a paso hasta que obtengas los cambios. – kaiser

13

para ver lo que ha cambiado en un archivo en la última confirmación:

git diff HEAD~1 path/to/file. 

Puede cambiar el número (~ 1) a la enésima comprometerse que desea con diff.

+0

Esta respuesta es realmente solo un caso específico de [esta respuesta más general] (http://stackoverflow.com/a/5586434/456814), donde 'HEAD ~ 1' se sustituye por' ', lo que hace que esta respuesta sea una duplicar. –

+1

esto no está funcionando! fatal: argumento ambiguo 'HEAD ~ 1': revisión desconocida o ruta no en el árbol de trabajo. Use '-' para separar las rutas de las revisiones –

4

git diff -w CABEZA ruta de origen/maestro/a/archivo

2

sintaxis genérica:

$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt 

para todos los archivos denominados "Filename.xml" en cualquier parte en tu repositorio.

Aviso el espacio entre "-" y "**"

respuesta a su pregunta:

$git checkout master 
$git diff oldCommit..HEAD -- **pom.xml 
or 
$git diff oldCommit..HEAD -- relative/path/to/pom.xml 

como siempre con git, se puede utilizar un/SHA1/"CABEZA etiqueta^"a id a commit.

Probado con git 1.9.1 en Ubuntu.

0

Si usted está buscando el diff en un determinado cometen y desea utilizar el github interfaz de usuario en lugar de la línea de comandos (dice que quiere vincularlo a otras personas), que puede hacer:

https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file> 

Por ejemplo:

https://github.com/grails/grails-core/commit/02942c5b4d832b856fbc04c186f1d02416895a7e/grails-test-suite-uber/build.gradle

Nota los enlaces anterior y siguiente en la parte superior derecha que le permiten navegar a través de todos los ficheros del envío.

Esto solo funciona para una confirmación específica, no para comparar entre dos versiones arbitrarias.

0
git diff master~20 -- pom.xml 

Funciona si no estás en la rama principal también.

3

Si ni cometer es su cabeza y luego la expansión corsé de fiesta resulta muy útil, sobre todo si sus nombres de archivo son largos, el ejemplo anterior:

git diff master~20:pom.xml master:pom.xml 

se convertiría en

git diff {master~20,master}:pom.xml 

Más sobre Brace expansion con bash.

1

Para comparar a 5 se comprometen a la actual, tanto en master, simplemente hacer:

git diff master~5:pom.xml master:pom.xml 

También puede hacer referencia a cometer el número de hash, por ejemplo, si el número de hash es x110bd64, puede hacerlo algo así para ver la diferencia:

git diff x110bd64 pom.xml 
Cuestiones relacionadas