Un riff en git: show all changed files between two commits: Quiero una lista de todos los archivos que se han cambiado entre dos commits, incluso si ahora son los mismos (es decir, cambiados y luego cambiados de nuevo).git: muestra todos los archivos modificados entre dos commits
Respuesta
Esto es lo mejor que podía llegar a:
git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq
Cambie el cabezal ^^ y la cabeza con las confirmaciones que desea comparar.
Mi intento utiliza git log
con --name-only
para enumerar todos los archivos de cada confirmación entre los especificados. --pretty=oneline
hace que la parte sobre la lista de archivos consista solo en el SHA de confirmación y el título del mensaje. --full-index
hace que el SHA tenga 40 caracteres completos. grep
filtra todo lo que parezca un SHA seguido de un espacio. A menos que tenga archivos que comiencen con un SHA seguido de un espacio, el resultado debe ser exacto.
Creo que este comando es su respuesta:
git diff --stat abc123 xyz123 #where abc123 and xyz123 are SHA1 hashes of commit objects
Directamente desde el git community book
Si no desea ver todo el parche, se puede añadir el '--stat' opción, que limitará la salida a los archivos que han cambiado junto con un pequeño gráfico de texto que representa cuántas líneas cambiaron en cada archivo.
Más específicamente, 'git diff --stat
No, esto no es exactamente lo que él quería. Git diff hace una diferencia directa entre los árboles, no considera los commits. Si crea un nuevo archivo con el contenido "A", entonces cambie el contenido a "B", luego cámbielos de nuevo a "A", "git diff --stat HEAD ^^ HEAD" le dará un resultado en blanco. – igorw
'git diff --name-only' es probablemente mejor que' git diff --stat' pero como se señala 'git diff' no está haciendo lo que el OP quería. – nnutter
Ésta es similar a igorw 's, pero evita la eliminación del SHA a través grep
:
git log --pretty='format:' --name-only HEAD^^..HEAD | sort -u
Si, además, quieres ver cómo se modificaron los archivos, reemplazar --name-only
con --name-status
.
Acabo de probar este comando. Tomó alrededor de 10 segundos para procesar y luego comenzó a arrojar una enorme lista de archivos. –
@ ostler.c: ¿Pasó el rango de revisión en '" $ @ "'? De lo contrario, mostrará los cambios existentes, que es mucho :-) He revisado mi respuesta para usar un ejemplo, como en las otras respuestas. –
Muy bien, eso tiene sentido. Me sorprende que no supiera "$ @". Aunque, no creo que sea muy útil para la mayoría de los comandos. –
Si sólo desea ver los nombres de los archivos donde cometen b
es cronológicamente después a
:
git diff <a commit sha1>...<b commit sha2> --name-only # b is after a in time
Si desea ver todos los nombres de archivo y lo que fue cambiado de cometer un cometer b luego dejar caer el último argumento.
git diff <a commit sha1>...<b commit sha2> # shows file names and what changed in each file
Un ejemplo de <commit sha1>
son el envío de datos de identificación, al igual 675ee6860d2c273bcc6c6a0536634a107e2a3d9f
. En general, los primeros 8-10 dígitos funcionarán en la mayoría de los proyectos, pero pueden necesitar más si el proyecto tiene montones de confirmaciones. Normalmente uso el resultado de la identificación desde git log --oneline
.
Cuando obtiene una diferencia de ... b y b es posterior a un tiempo, es fácil ver lo que ha cambiado en cada archivo cronológicamente.
Yo usaría; tomando los primeros 8 del commit hash. Si quieres puedes tubería en un archivo de acuerdo con el siguiente:
git log 12345678..87654321 > C:\GitChanges.txt
- 1. ¿Cómo exportar todos los archivos modificados/agregados de Git?
- 2. CVS: enumera todos los archivos modificados entre etiquetas (o fechas)
- 3. Git cambio entre commits
- 4. Git ¿agregar todos los archivos modificados, eliminados y sin seguimiento?
- 5. git: lista de todos los archivos modificados incluidos los de los submódulos
- 6. IntelliJ: Visualización de diferencias de todos los archivos modificados entre local y git commit/branch
- 7. Ver todos los archivos modificados en TFS
- 8. ¿Cómo obtener una lista de todos los archivos que cambiaron entre dos confirmaciones de Git?
- 9. submódulo git los archivos modificados de estado
- 10. Mercurial que muestra archivos modificados incorrectamente
- 11. Egit muestra todos los archivos como cambiados
- 12. ¿Por qué git muestra un conflicto entre dos archivos agregados aparentemente idénticos?
- 13. ¿Cómo puedo unir dos repositorios git sin una raíz común, donde todos los archivos modificados son los mismos?
- 14. ¿Cómo enumerar todos los archivos modificados en un volumen oculto?
- 15. Lista GIT de archivos nuevos/modificados/eliminados
- 16. Cómo hacer que `git log --stat - <path>` muestre * todos * los archivos en commits seleccionados?
- 17. Crea una lista de archivos/directorios/etc modificados. usando git entre dos etiquetas
- 18. svn diff no muestra archivos externos modificados
- 19. Mostrar diff entre commits
- 20. Git: cómo obtener todos los archivos modificados y nuevos en una carpeta o zip?
- 21. git: enumere todos los archivos agregados/modificados en un día (o semana/mes ...)
- 22. ¿Hay alguna manera de ver todos los archivos modificados en una rama en Git?
- 23. ¿Qué comando svn enumeraría todos los archivos modificados en una rama?
- 24. Encontrar la mayoría de los archivos modificados en Git
- 25. Git merge commits
- 26. Eliminar commits grandes de git
- 27. SVN: ¿Cómo exportar los archivos modificados con todos los mensajes de registro a una lista?
- 28. Resultados de extracción de Git en "necesita actualización" y archivos mostrados como modificados
- 29. Desescalonar todos los archivos eliminados en Git
- 30. Git-archive old commits
Cuando ejecuto ese comando contra la cabeza^y la cabeza, tengo una lista de lo que parece ser cada archivo en el repositorio; incluso aquellos que no han cambiado. –
Mi mal, el formato es " .. " en lugar de "". –
igorw
Gracias, un poco incómodo pero servirá. – Andrew