Ver cambios a un archivo específico usando git

472

Sé que puedo usar el git diffcomando para verificar los cambios, pero, por lo que he entendido, está basado en un directorio. Esto significa que proporciona todos los cambios de todos los archivos en el directorio actual.

¿Cómo puedo verificar solo los cambios en un archivo específico? Digamos, he cambiado archivos file_1.rb, file_2.rb..., file_N.rbpero solo estoy interesado en los cambios en el archivo file_2.rb. ¿Cómo verifico estos cambios entonces (antes de comprometerme)?

Mellon
fuente
1
posible duplicado de ¿Cómo ver el historial de archivos en Git?
CharlesB
44
Mi pregunta principal es cómo verificar la diferencia para un archivo específico antes de confirmar todos los cambios. Git log es para cambios comprometidos, supongo.
Mellon
1
En mi experiencia es mejor usar una herramienta visual como GitKraken
Giovanni Benussi

Respuestas:

642

Use un comando como:

git diff file_2.rb

Consulte la git diffdocumentación para obtener información completa sobre los tipos de cosas por las que puede obtener diferencias.

Normalmente, git diffpor sí solo muestra todos los cambios en todo el repositorio (no solo el directorio actual).

Greg Hewgill
fuente
100
Si desea ver los cambios de un archivo que ya ha "editado git", es "git diff --cached"
Ana Betts
8
Si desea verificar un archivo con una confirmación anterior: $ git diff [commit hash] file_2.rb
Alex Angelico
2
¿Cómo salir de la vista de diferencias?
Garry
1
O use SourceTree.
GeneCode
44
@GurpreetsinghDhanju Intenta presionar Q
110

Otro método (mencionado en esta respuesta SO ) mantendrá el historial en el terminal y le dará un historial muy profundo del archivo en sí:

git log --follow -p -- file

Esto mostrará el historial completo del archivo (incluido el historial más allá de los cambios de nombre y con diferencias para cada cambio).

En otras palabras, si el archivo llamado bar alguna vez se llamó foo, entonces git log -p bar (sin la opción --follow) solo mostrará el historial del archivo hasta el punto donde fue renombrado; no mostrará el historial del archivo cuando se conocía como foo. Usando git log --follow -p bar mostrará el historial completo del archivo, incluidos los cambios en el archivo cuando se conocía como foo.

AJ Zane
fuente
3
Funciona bien con --stat para tener una visión general de las líneas agregadas / eliminadas.
Tom Hale
2
Sí, esta respuesta debe ser al menos más alta, rastrea el historial, no solo la diferencia actual, ni tiene que hacer un seguimiento de todos los hashes de confirmación. Uso bastante simple pero muy potente en los cambios
Ilhicas
87

Puede usar gitk [filename]para ver el registro de cambios

da Rocha Pires
fuente
2
Esto mostrará el historial de las confirmaciones en el archivo, que a veces puede ser lo que necesita.
r1k0
26

Puede usar el siguiente comando para ver quién ha cambiado qué en un archivo.

git blame <filename>

Vineet
fuente
44
Esta es la mejor respuesta, ya que le dice quién realizó qué cambio, y cuándo y de qué compromiso fue parte el cambio. Para filtrar por un cambio específico, simplemente haga git blame <filename> | grep <searchfor>donde <searchfor>sea ​​un valor corto. Por ejemplo, para averiguar quién cambió fooa baren dist/index.php, utilizaríagit blame dist/index.php | grep bar
Kraang primer
15

Puedes ejecutar

git status -s

Esto mostrará el nombre de los archivos modificados y luego copiando la ruta del archivo interesado puede ver los cambios usando git diff

git diff <filepath + filename>
Tejas Pawar
fuente
8

para enumerar solo confirma detalles para cambios de archivo específicos,

git log --follow file_1.rb

para enumerar la diferencia entre varias confirmaciones para el mismo archivo,

git log -p file_1.rb

para enumerar solo commit y su mensaje,

git log --follow --oneline file_1.rb
Mohideen bin Mohammed
fuente
5

también puedes probar

git show <filename>

Para las confirmaciones, git show mostrará el mensaje de registro y la diferencia textual (entre su archivo y la versión confirmada del archivo).

Puede consultar la documentación de git show para obtener más información.

LuisBento
fuente
0

Totalmente de acuerdo con @Greg Hewgill

Y si su ruta incluye espacios, puede usar, intente agregar con apóstrofo 'o `

git diff 'MyProject / My Folder / My Sub Folder / file_2.rb'

MrMins
fuente