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)?



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).


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.


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


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>


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>

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

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.



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'

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.