¿Cómo puedo ver lo que ha cambiado en un archivo antes de comprometerme con git?

351

Me di cuenta de que mientras trabajaba en uno o dos boletos, si me alejo, no estoy seguro de en qué trabajé, qué cambió, etc.

¿Hay alguna manera de ver los cambios realizados para un archivo dado antes de git add y luego git commit?

Timothy T.
fuente

Respuestas:

525

Usted está buscando git diff. Dependiendo de su situación exacta, hay tres formas útiles de usarlo:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Funcionará de forma recursiva en directorios, y si no se proporcionan rutas, muestra todos los cambios.

Cascabel
fuente
1
@ sveilleux2 No, solo ejecute git diff sin ningún argumento, como dice la última oración de la respuesta, si no se dan rutas, muestra todos los cambios. (Los corchetes en [filename]indican un argumento opcional.) Con el *que está dejando que el shell enumere todos los archivos, por lo que si está en un subdirectorio solo obtendrá cosas en ese subdirectorio (no todo el repositorio), y usted ' Echaré de menos los cambios en los archivos ocultos.
Cascabel
# muestra las diferencias entre el compromiso actual y el índice # es decir, lo que está a punto de cometer git diff --cached [nombre de archivo] No quiere decir: # muestra las diferencias entre el compromiso actual y el índice # es decir, de qué se trata a empujar ? git diff --cached [filename]
ofarooq
3
Para ver las diferencias realizadas después de agregar un archivo (es decir, después de "git add"), haga "git diff --staged [filename]"
Sidtharthan
Oh, ¿por qué es tan complicado? ¿Qué pasa si tenemos un par de docenas de archivos? ... Solo me quejo de la interfaz de git ... Sí, parece, git add -pes una alternativa para inspeccionar todos los archivos.
Kirby el
@Jefromi: considere agregar git diff --staged [filename]su respuesta principal, ya que es una situación que se necesita con mayor frecuencia.
Lázaro Thurston
8

git diff filename

elmt
fuente
8

Para mí, git add -pla forma más útil (¿y con la intención, creo, de los desarrolladores de git?) De revisar todos los cambios no organizados (muestra la diferencia para cada archivo), elegir un buen conjunto de cambios que deberían ir con un commit, luego cuando tenga organizó todo eso, luego use git commity repita para la próxima confirmación. Luego puede hacer que cada confirmación sea un conjunto de cambios útil o significativo, incluso si se llevaron a cabo en varios archivos. También sugeriría crear una nueva rama para cada boleto o actividad similar, y cambiar entre ellas usando checkout(quizás usando git stashsi no desea comprometerse antes de cambiar), aunque si está haciendo muchos cambios rápidos, esto puede ser un dolor. No te olvides de unirte a menudo.

Reed Hedges
fuente
Entonces, en lugar de git add, use git add -p?
Timothy T.
1
git add -p es una combinación de puesta en escena, ver los cambios que puede organizar y seleccionarlos uno por uno de manera interactiva. Consulte Confirmar solo parte de un archivo en Git para obtener más información sobre git add -p.
Angelos Asonitis
5

git diff

Mostrar cambios entre el árbol de trabajo y el índice o un árbol, cambios entre el índice y un árbol, cambios entre dos árboles o cambios entre dos archivos en el disco.

miku
fuente
La cita es demasiado: por defecto, realiza la primera comparación: entre el árbol de trabajo y el índice.
Cascabel
4

Recuerda, estás cometiendo cambios , no archivos.

Por esta razón, es muy raro que no use git add -p(o el equivalente de magit) para agregar mis cambios.

Dustin
fuente
2
git NO se ocupa de los cambios: tratar de pensar en ello como si fuera la principal fuente de confusión y errores. Git trata con instantáneas.
Chris Dodd
3
git diff <path>/filename

La ruta puede ser la ruta completa del sistema hasta el archivo o
si está en el proyecto, pegue la ruta del archivo modificado también
para los archivos modificados con el uso de la ruta:git status

HariKishore
fuente
2

Bueno, mi caso cuando no quieres preocuparte por la lista de archivos. Solo muéstrales a todos.

Cuando ya corriste git addcon tu lista de archivos:

$ git diff --cached $(git diff --cached --name-only)

En versiones más recientes de git, puede usar --stagedtambién, que es sinónimo de --cached.

Lo mismo se puede usar para no haber agregado archivos pero sin --cachedopción.

$ git diff $(git diff --name-only)

Alias ​​de comando Git para la opción "en caché":

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'
Kirby
fuente
3
Gracias por los detalles git diff --cached --name-only fue el comando que estaba buscando ...
Doogle
1

Vaya a su respectivo repositorio de git, luego ejecute el siguiente comando:

nombre de archivo git diff

Se abrirá el archivo con los cambios marcados, presione la tecla Intro / Entrar para desplazarse hacia abajo.

El nombre de archivo PS debe incluir la ruta completa del archivo o, de lo contrario, puede ejecutar sin la ruta completa del archivo yendo al directorio / carpeta correspondiente del archivo

Yash Bansal
fuente
0

También puede usar un editor de texto compatible con git. Muestran colores en las líneas que se han modificado, otro color para líneas agregadas, otro color para líneas eliminadas, etc.

Un buen editor de texto que hace esto es GitHub's Atom 1.0 .

AskYous
fuente