¿Cómo obtener una lista de todos los archivos que cambiaron entre dos confirmaciones de Git?
178
Debido a la burocracia, necesito obtener una lista de todos los archivos modificados en mi repositorio para un informe (comencé con el código fuente existente).
Para los archivos modificados entre un SHA determinado y su confirmación actual:
git diff --name-only <starting SHA> HEAD
o si desea incluir archivos modificados pero aún no confirmados:
git diff --name-only <starting SHA>
De manera más general, la siguiente sintaxis siempre le indicará qué archivos cambiaron entre dos confirmaciones (especificadas por sus SHA u otros nombres):
y si quieres saber los archivos modificados para una confirmación en concreto hacer:git diff --name-only <SHA> <SHA>^
thebugfinder
3
Usar la --name-statusbandera en lugar de --name-onlyes útil para obtener una lista de archivos y ver su estado de modificación, como Agregado o Modificado.
Thane Plummer
@Amber debería mencionar las notas de @Thane Plummer que --name-statusmuestran lo que les sucedió
Zoltán Süle
64
Para encontrar los nombres de todos los archivos modificados desde su última confirmación:
git diff --name-only
O (para obtener un poco más de información, incluidos los archivos sin seguimiento):
Para enumerar todos los archivos no rastreados (los enumerados por git status, sin incluir los archivos ignorados):
git ls-files --other --exclude-standard
Si está utilizando esto en un script de shell y desea verificar mediante programación si estos comandos devuelven algo, le interesará git diffla --exit-codeopción.
filtro diferencial = [(A | C | D | M | R | T | U | X | B)… [*]]
Seleccione solo los archivos que se añaden (A), se copian (C), se eliminan (D), se modifican (M), se cambian de nombre (R), se les cambia su tipo (es decir, archivo normal, enlace simbólico, submódulo, ...) (T), no están fusionados (U), son desconocidos (X) o se han roto sus pares (B). Se puede usar cualquier combinación de los caracteres de filtro (incluido ninguno). Cuando se agrega * (All-or-none) 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 ningún archivo que coincida con otros criterios, no se selecciona nada.
Además, estas letras mayúsculas se pueden descartar para excluir. Por ejemplo, --diff-filter = ad excluye las rutas agregadas y eliminadas.
Si también desea enumerar el estado (p. Ej., A / M), cambie --name-onlya --name-status.
Tenga en cuenta que esto solo se puede usar para cambios no organizados, por lo que no es útil para 'archivos que cambiaron entre dos confirmaciones de Git'
John Vandenberg
2
Con git showusted puede obtener un resultado similar. Para ver el commit (como se ve a la git logvista) con la lista de archivos incluidos, use:
git show --name-only [commit-id_A]^..[commit-id_B]
¿Dónde [commit-id_A]está la confirmación inicial y [commit-id_B]es la última confirmación de lo que desea mostrar?
Atención especial con ^símbolo. Si no pone eso, la información commit-id_A no se desplegará.
Si desea verificar los archivos modificados, debe ocuparse de muchas cosas pequeñas, como cuál será el mejor para usar, como si desea verificar cuáles de los archivos cambiados simplemente escriba
estado de git: mostrará los archivos con cambios
entonces, si desea saber qué cambios se deben realizar, puede verificarlos de alguna manera,
git diff: mostrará todos los cambios en todos los archivos
es bueno solo cuando se modifica un solo archivo
y si desea verificar un archivo en particular, use
Respuestas:
Para los archivos modificados entre un SHA determinado y su confirmación actual:
o si desea incluir archivos modificados pero aún no confirmados:
De manera más general, la siguiente sintaxis siempre le indicará qué archivos cambiaron entre dos confirmaciones (especificadas por sus SHA u otros nombres):
fuente
git diff --name-only <SHA> <SHA>^
--name-status
bandera en lugar de--name-only
es útil para obtener una lista de archivos y ver su estado de modificación, como Agregado o Modificado.--name-status
muestran lo que les sucedióPara encontrar los nombres de todos los archivos modificados desde su última confirmación:
O (para obtener un poco más de información, incluidos los archivos sin seguimiento):
fuente
Para una lista de todos los unstaged archivos modificados de orugas:
Para enumerar todos los archivos cambiados rastreados por etapas :
Para enumerar todos los archivos cambiados rastreados y no escalonados :
Para enumerar todos los archivos no rastreados (los enumerados por
git status
, sin incluir los archivos ignorados):Si está utilizando esto en un script de shell y desea verificar mediante programación si estos comandos devuelven algo, le interesará
git diff
la--exit-code
opción.fuente
Cuando agregué / modifiqué / eliminé muchos archivos (desde la última confirmación), me gusta ver esas modificaciones en orden cronológico.
Para eso uso:
Para enumerar todos los archivos no organizados:
Para obtener la última fecha de modificación para cada archivo:
Aunque ruvim sugiere en los comentarios :
Para ordenarlos del más antiguo al más reciente:
Un alias hace que sea más fácil de usar:
O (más corto y más eficiente, gracias a ruvim )
Por ejemplo:
Ahora puedo revisar mis modificaciones, desde la más antigua hasta la más reciente.
fuente
xargs
sola llamadastat
? Lagit ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Necesito una lista de archivos que hayan cambiado el contenido entre dos confirmaciones (solo agregadas o modificadas), así que usé:
Las diferentes opciones de filtro de diferencias de la documentación de git diff :
Si también desea enumerar el estado (p. Ej., A / M), cambie
--name-only
a--name-status
.fuente
La lista de modificaciones no preparadas se puede obtener usando
git status
y elgrep
comando como a continuación. Algo comogit status -s | grep M
:fuente
Con
git show
usted puede obtener un resultado similar. Para ver el commit (como se ve a lagit log
vista) con la lista de archivos incluidos, use:¿Dónde
[commit-id_A]
está la confirmación inicial y[commit-id_B]
es la última confirmación de lo que desea mostrar?Atención especial con
^
símbolo. Si no pone eso, la información commit-id_A no se desplegará.fuente
Si desea verificar los archivos modificados, debe ocuparse de muchas cosas pequeñas, como cuál será el mejor para usar, como si desea verificar cuáles de los archivos cambiados simplemente escriba
estado de git: mostrará los archivos con cambios
entonces, si desea saber qué cambios se deben realizar, puede verificarlos de alguna manera,
git diff: mostrará todos los cambios en todos los archivos
es bueno solo cuando se modifica un solo archivo
y si desea verificar un archivo en particular, use
git diff
fuente