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?

Dogbert
fuente

Respuestas:

151

Lo siguiente funciona para mí:

git diff master:foo foo

En el pasado, pudo haber sido:

git diff foo master:foo

Mark Longair
fuente
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.
Jordan Brough
fuente
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í.

ArtBIT
fuente
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
Adir
fuente
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

Naoise Golden
fuente
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.

kta
fuente