diff copia de trabajo actual de un archivo con copia confirmada de otra rama


158

Tengo un repositorio con archivo fooen la rama maestra. Cambié a rama de barra e hice algunos cambios en foo. ¿Cómo puedo ejecutar ahora una git diffcopia entre esta copia (que aún no está confirmada) y la copia de la rama maestra?

Respuestas:


151

Lo siguiente funciona para mí:

git diff master:foo foo

En el pasado, pudo haber sido:

git diff foo master:foo


9
Cada vez que veo una respuesta tuya con respecto git diff, siempre pienso en stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/…
— VonC

@VonC: gracias, es bueno saber que valió la pena dibujarlas :) Por cierto, ¿entiendes la rareza con la que actualicé mi respuesta?
— Mark Longair

2
¿Intentó con un --para separar los parámetros de los argumentos de ruta? git diff -- master:foo foo
— VonC

1
En 1.8, git diff -- master:foo foono funciona: parece tratar el argumento master:foocomo un nombre de archivo inexistente (y lo ignora) en lugar de un archivo en una rama. Intente cambiar los últimos 2 args: si funcionó, la comparación de diferencias debería invertirse, pero la salida no cambia.
— Kelvin

9
Para mí es todo lo contrario: puedo hacerlo, git diff master:foo foopero no al revés. Yo tampoco lo entiendo. Con git 1.7.9.5 / Ubuntu 12.04, al menos puedo hacer git diff -R master:foo foopara obtener la diferencia que realmente quiero. Cuando intento eso con msysgit 1.9.4 / Windows 7 x64 me sale fatal: unable to read 0000000000000000000000000000000000000000. Sin -Rmí recibo el mismo mensaje de error que con git 1.7.9.5, pero con 1.9.4 obtengo fatal: master:foo: no such path in the working tree.
— JMM

100

Estás tratando de comparar tu árbol de trabajo con un nombre de rama en particular, así que quieres esto:

git diff master -- foo

Que es de esta forma de git-diff (vea la página de manual de git-diff)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

Para su información, también hay una opción --cached(aka --staged) para ver la diferencia de lo que ha puesto en escena, en lugar de todo en su árbol de trabajo:

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

2
Gracias. No tengo idea de por qué, pero solo esta respuesta funcionó para mí con git 1.8.1 en Linux.
— srking

Excelente gracias. Me obsesioné con querer incluir el nombre de mi rama actual en el comando diff, pero veo que no es necesario.
— yoyo

Esto funcionó para mí hace unos meses, pero no parece ser ahora. Actualmente estoy en git versión 2.7.4 (Apple Git-66); No sé lo que tenía antes.
— hBrent

@hBrent esto todavía funciona para mí en OSX 10.11 con git 2.7.3. Aquí hay un repositorio de muestra rápida con instrucciones si eso es útil: github.com/jordan-brough/git-diff-test
— Jordan Brough

Gracias @JordanBrough.
— hBrent

14

También: git diff master..feature foo

Ya git diff foo master:fooque no funciona en directorios para mí.


Yo tampoco. ¿Es una cosa de Windows?
— Scott Stafford

@ScottStafford Estoy en Ubuntu, así que no, no parece ser solo una cosa de Windows.
— ArtBIT

Funciona para mí siempre que explícitamente dé ambos nombres de sucursal (windows) git diff branch1:foo master:foo
— Meep

12
git difftool tag/branch filename

Esta es la única respuesta que me funcionó para la comparación entre una copia de trabajo local de un archivo y esa versión del archivo en un repositorio remoto (no "origen"). Gracias, Adir y Baz
— Ratón

git difftoolno tiene -vopción según docs git-scm.com/docs/git-difftool . Quiso decir -y?
— ks1322

10
git diff mybranch master -- file

también debería funcionar


44
Esto solo funciona para archivos comprometidos con mybranch, no para la copia de trabajo actual del archivo.
— yoyo

qué significa "-" arriba
— Pushparaj

Esto permite comparar en ambas direcciones: git diff deployment master -- filey git diff master deployment -- filefuncionan como se espera con 2 ramas .
— viktorkho

0

Para ver los cambios locales en comparación con su sucursal actual

git diff .

Para ver cambios locales, compare con cualquier otra sucursal existente

git diff <branch-name> .

Para ver los cambios de un archivo en particular

git diff <branch-name> -- <file-path>

Asegúrate de correr git fetchal principio.

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.