2012-04-06 13 views
237

Esto sucede a menudo a mí:Cómo ver diff de archivo en Git antes de cometer

estoy trabajando en unas relacionada par de cambios al mismo tiempo, en el transcurso de un día o dos, y cuando llega el momento de cometer , Termino olvidando lo que cambió en un archivo específico. (Esto es solo un repositorio de git personal, así que estoy de acuerdo con tener más de una actualización en un commit.)

¿Hay alguna manera de obtener una vista previa de los cambios entre mi archivo local, que está por registrarse, y el último commit para ese archivo?

Algo así como:

git diff --changed /myfile.txt 

Y sería imprimir 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 registrado.

Respuesta

418

Si quieres ver lo que tiene no git add ed aún:

git diff myfile.txt 

o si desea ver ya- add ed cambia

git diff --cached myfile.txt 
+7

Tenga en cuenta que el doble guión solo es necesario porque existe una posible confusión entre una revisión y un nombre de archivo (y en ese caso, git se lo dirá). –

+0

¡Gracias! git diff myfile.txt era eso. Gracias también por la punta doble del tablero. –

+3

echa un vistazo a 'git add -p'. Revise cada cambio, apruebe selectivamente los cambios en el escenario, aborte en cualquier momento si cambia de opinión, e incluso edite en línea un fragmento. Nunca 'git add' sin él. –

11

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

+1

Desde git 1.7.2 – OlivierBlanvillain

+0

Buena respuesta. Esto puede proporcionar información en el editor de commit, me hace cometer más fácilmente. ¿Hay alguna forma de cerrar el área de información de 'Changes not staged for commit:' que puede hacer que el editor de commit esté más limpio. –

12

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

Personalmente, cada compromiso mío, lo hago desde el git-gui. En el cual puedo hacer múltiples commits atómicos con hunks/lines separados si tiene sentido hacerlo.

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

+0

Estoy de acuerdo, también te permite editar el mensaje de compromiso mientras miras el diff. –

+0

Es bueno saberlo, pero me gustaría seguir con CLI. He usado un par de paquetes que lo tenían, pero me he movido a terminantemente/vim para mi flujo de trabajo. Gracias sin embargo. –

+0

Sí, si te apegas a la GUI, hay muchas funciones geniales como 'git bisect' que no son realmente accesibles. – NoBugs

44
git diff HEAD file 

le mostrará los cambios que ha agregado a su worktree desde la última confirmación. Se mostrarán todos los cambios (en etapas o sin etapas).

+1

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

10

para comprobar si hay diferencias locales:

git diff myfile.txt 

o se puede utilizar una herramienta de diferencias (en caso de que desea revertir algunos cambios):

git difftool myfile.txt 

Para utilizar de manera más eficiente git difftool , instale y use su herramienta de 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 blame que mostrará qué línea se ha comprometido en la confirmación.


Para ver el archivo real antes de la confirmación (donde master es su rama), ejecute:

git show master:path/my_file 
1

La mejor manera que he encontrado, aparte de usar una interfaz gráfica de usuario dedicada cometer, es utilizar git difftool -d - Esto abre su herramienta diff en el modo de comparación de directorios, comparando HEAD con la carpeta sucia actual.

8

Otra técnica a tener en cuenta si se quiere comparar un archivo a la última confirmación que es más pedante:

git diff master myfile.txt 

La ventaja de esta técnica es que también puede comparar a la penúltima comprometerse con:

git diff master^ myfile.txt 

y la anterior que:

git diff master^^ myfile.txt 

también le puede substi tute '~' para el carácter '^' y 'tu nombre de rama' para 'maestro' si no estás en la rama principal.

3

en MacOS, ir al directorio raíz git y entrar git diff *

+0

esto no está funcionando en win10 – lucaste

0
git difftool -d HEAD filename.txt 

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