Git diff entre {HEAD, stage, working dir}

Tengo un file que he cambiado para agregar 2 nuevas características a los sistemas. Ahora solo quiero comprometer una de las funciones en la twig. Así que revisé los cambios con git add -p y ahora quiero verificar que solo obtuve las partes de esta característica y que no olvidé ninguna. Por lo tanto, mi idea era ver las diferencias como diff entre {HEAD, stage, working dir}.

Intenté get los controlleres correctos para los diferentes files y luego combinarlos con una llamada de git difftool.

HEAD: git show HEAD:src/autosub.py -> HEAD:src/autosub.py

puesta en escena: git show :src/autosub.py -> :src/autosub.py

dir de trabajo: src/autosub.py

Pero la llamada combinada no funciona: git difftool HEAD:src/autosub.py :src/autosub.py src/autosub.py

¿Qué estoy haciendo mal? ¡Gracias!

git diff :

git diff [options] [<commit>] [--] [<path>...​]

Solo acepta commit como arguments y no tiene la intención de hacer un diff3 con otras cosas que no sean commit.
Tienes que hacerlo en 2 partes:

  • Para get la diferencia entre su directory de trabajo y la etapa: git diff[tool]
  • Para get la diferencia entre el escenario y HEAD : git diff[tool] --staged (o git diff --cached )

El segundo es la manera de ver lo que comprometerá.

Puede configurar diff.mnemonicPrefix para ver el diff.mnemonicPrefix w (dir de trabajo), i (índice / etapa) o c (commit / HEAD) en el diff en lugar de a y b .

Si realmente necesita hacer un diff3 entre WD / stage / HEAD:

 git show HEAD:path > /tmp/head git show :path > /tmp/staged diff3 /tmp/head /tmp/staged path rm /tmp/head /tmp/staged 

Puede poner esto en una function de shell o un script y luego agregarlo como un alias :

 # Diff-3 between _C_ommit/_I_ndex/_W_orkingdir git config --global alias.diff3ciw '! the_script'