remote online one files commits branches git diff

online - Filter git diff por tipo de cambio



git diff online (5)

¿Hay alguna forma de limitar los archivos modificados a git diff ?

Me gustaría ver las diferencias entre dos confirmaciones, pero excluir las rutas que no existen en una u otra (adiciones / eliminaciones). El siguiente trazador de líneas de Perl ilustra la mayor parte de lo que quiero:

git diff master.. | perl -lnwe ''print unless /^(new|deleted) file/../^diff/ and not /^diff/''

Pero eso deja diff --git a/path b/path lines para los archivos que fueron nuevos o eliminados. Además, sería mucho mejor si no tuviera que analizar (también falla si algún trozo contiene algo que coincida / ^ diff /, por ejemplo).

Otra alternativa que probé fue:

git diff --name-status (args) | perl -lnwe ''print if s/^M/s+//'' | xargs git diff (args) --

Su salida es mejor, pero todavía se siente hackish.


Como nos recordará Git 2.10 (Q3 2016), existe una manera más fácil de "mostrar todo, excepto archivos agregados / eliminados". (en realidad desde Git 1.8.5, julio de 2013)

git diff --diff-filter=ad master..

Ver commit 16726cf (14 Jul 2016) por Junio ​​C Hamano ( gitster ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit 2f8c654 , 08 de agosto de 2016)

diff : documento diff-filter exclusion

En v1.8.5 días, 7f2ea5f ( diff : permite que la letra minúscula especifique qué clase de cambio excluir, 2013-07-17) enseñó el --diff-filter " --diff-filter " para tomar letras minúsculas como exclusión , pero olvidamos documentarlo .

Entonces la documentación sobre diff-options ahora (finalmente) incluye:

Estas letras mayúsculas se pueden descartar para excluir.
Ej --diff-filter=ad excluye rutas añadidas y eliminadas.


Está buscando --diff-filter=M para mostrar solo los archivos * M * odified entre las dos ramas.

De man git-diff

--diff-filter=[ACDMRTUXB*]

Seleccione solo los archivos que están

  • A agregado
  • C copiado
  • D eliminado
  • M modificado
  • R Renombrado
  • T tienen su tipo (modo) cambiado
  • U fusionar
  • X Desconocido
  • B ha tenido su pareja rota
  • * Todo o nada

Se puede usar cualquier combinación de los caracteres de filtro.

Cuando * (Todo o nada) se agrega a la combinación, todas las rutas se seleccionan si hay algún archivo que coincida con otros criterios en la comparación; si no hay un archivo que coincida con otros criterios, no se selecciona nada.


Para ver todos los archivos modificados y nuevos que puedes usar

git diff --name-only --diff-filter=ACMR PREV_VERSION master

PREV_VERSION es el hash de tu primer commit.

Para obtener una exportación como zip, puede usar este código

git archive --output=export.zip HEAD $(git diff --name-only --diff-filter=ACMR PREV_VERSION HEAD)

Nota: .gitignore no está en export.zip


Puede usar el indicador --diff-filter para hacer precisamente esto. git diff --diff-filter=CMRTUXB master.. debe mostrar todo excepto archivos agregados / eliminados.


Utilicé Notepad ++ (Windows) y estas expresiones regulares para filtrar los tipos de extensión y ciertas rutas desde un archivo diff.

^Index.*/.(dll|pdb|exe|txt|zip|log|ism|resx|tlog|htm|lib)$[/s/S.]*?^Index ^Index: Shared/.+$[/s/S.]*?^Index ^Index: Next/source/Utility/.+$[/s/S.]*?^Index

El único problema es cuando llega al final. Tienes que ''ctrl + home'' y volver hasta que no encuentre nada.

(Reemplace lo que se encuentra con ''Índice'')