Cómo ver el archivo diff en git antes de confirmar

443

Esto a menudo me pasa a mí:

Estoy trabajando en un par de cambios relacionados al mismo tiempo en el transcurso de un día o dos, y cuando es hora de comprometerse, termino olvidando lo que cambió en un archivo específico. (Esto es solo un repositorio personal de git, así que estoy de acuerdo con tener más de una actualización en una confirmación).

¿Hay alguna forma de obtener una vista previa de los cambios entre mi archivo local, que está a punto de registrarse, y la última confirmación para ese archivo?

Algo como:

git diff --changed /myfile.txt

Y imprimiría algo como:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

De esta manera, pude ver rápidamente lo que había hecho en ese archivo desde la última vez que se registró.

Salsa McBoss
fuente

Respuestas:

732

Si quieres ver lo que aún no has git addeditado:

git diff myfile.txt

o si quieres ver los cambios ya agregados

git diff --cached myfile.txt
Ámbar
fuente
20
echa un vistazo git add -p. Revise cada cambio, apruebe selectivamente los cambios a la etapa, cancele en cualquier momento si cambia de opinión e incluso edite un fragmento en línea. Yo nunca git addsin eso.
Kyle Baker,
2
¿Cómo puedes salir del archivo?
Kick Buttowski el
3
@Kick Intenta presionarq
wjandrea
Además, si desea eliminar los tontos prefijos 'a /' y 'b /' en el resultado diff, puede configurarlo git config --global diff.noprefix true.
Liang
64
git diff HEAD file

le mostrará los cambios que agregó a su árbol de trabajo desde la última confirmación. Se mostrarán todos los cambios (organizados o no).

ouah
fuente
1
Tu solución funciona. Pero estoy un poco confundido. HEAD apunta al último número de confirmación. Entonces, cuando agregamos, el índice del directorio de trabajo se actualiza y no el HEAD. Entonces, ¿cómo muestra la diferencia?
Mav55
17

Para verificar las diferencias locales:

git diff myfile.txt

o puede usar una herramienta de diferencias (en caso de que desee revertir algunos cambios):

git difftool myfile.txt

Para usar de manera git difftoolmás eficiente, instale y use su herramienta GUI favorita, como Meld, DiffMerge u OpenDiff.

Nota: También puede usar .(en lugar de nombre de archivo) para ver los cambios de directorio actuales.

Para verificar los cambios por cada línea, use: git blameque mostrará qué línea se confirmó en qué confirmación.


Para ver el archivo real antes de la confirmación (dónde masterestá su rama), ejecute:

git show master:path/my_file
kenorb
fuente
15

¿Intentó -v(o --verbose) la opción para git commit? Agrega la diferencia de la confirmación en el editor de mensajes.

vhallac
fuente
Buena respuesta. Esto puede proporcionar información en el editor de confirmación, me hace confirmar más fácilmente. ¿Hay alguna manera de cerrar el área de información Changes not staged for commit:que puede hacer que el editor de confirmación sea más limpio?
Radian Jheng
15

Otra técnica a considerar si desea comparar un archivo con la última confirmación que es más pedante:

git diff master myfile.txt

La ventaja de esta técnica es que también se puede comparar con el penúltimo commit con:

git diff master^ myfile.txt

y el anterior:

git diff master^^ myfile.txt

También puede sustituir '~' por el carácter de intercalación '^' y 'nombre de su rama' por 'maestro' si no está en la rama maestra.

anisbet
fuente
14

Creo que este es el caso de uso perfecto que garantiza una GUI. - Aunque entiendo totalmente que también se puede lograr lo suficientemente bien dentro de la línea de comando.

Personalmente, cada compromiso mío, lo hago desde el git-gui. En el que puedo hacer múltiples confirmaciones atómicas con líneas / trozos separados si tiene sentido hacerlo.

Gut Gui permite ver los diferenciales en una interfaz de color bien formateada, es bastante ligera. Parece que esto es algo que también deberías pagar.

Lakshman Prasad
fuente
Estoy de acuerdo, también le permite editar el mensaje de confirmación mientras mira el diff.
François
Es bueno saberlo, pero me gustaría seguir con CLI. Utilicé un par de paquetes que lo tenían, pero me mudé a estrictamente terminal / vim para mi flujo de trabajo. Gracias sin embargo.
Salsa McBoss
Sí, si te apegas a la GUI, hay muchas funciones interesantes como git bisectesa que no son realmente accesibles.
NoBugs
2
Estoy de acuerdo: hay muchas opciones para las cuales es mucho más rápido y tiene más sentido usar la línea de comandos. Sin embargo, la vista previa de los cambios no es uno de ellos.
VitalyB
También hay interfaces de usuario de texto que se ejecutan en la terminal. Una que vale la pena ver es tig"interfaz de modo de texto para Git".
smido
10

En macOS, vaya al directorio raíz de git e ingrese git diff *

catanore
fuente
Sí, lo acabo de probar. ¿Tienes git instalado? ¿Algún mensaje de error? Quizás podría hacerse una nueva pregunta al respecto.
catanore
4

La mejor manera que encontré, además de usar una GUI dedicada de compromiso, es usar git difftool -d: esto abre su herramienta de diferencias en el modo de comparación de directorios, comparando HEAD con la carpeta sucia actual.

VitalyB
fuente
exactamente lo que necesitaba Gracias
Ivan Ferrer Villa
3
git difftool -d HEAD filename.txt

Esto muestra una comparación usando la ventana de hendidura VI en la terminal.

Tomachi
fuente