git - regresar - ¿Cómo listar todos los archivos en un commit?
ver cambios en un archivo git (27)
Encontré una respuesta perfecta a esto:
git show --name-status --oneline <commit-hash>
Para que yo pueda saber
which files were just modified M
Which files were newly added , A
Which files were deleted , D
Estoy buscando un comando git
simple que proporcione una lista bien formateada de todos los archivos que formaron parte de la confirmación dada por un hash (SHA1), sin información extraña.
Yo he tratado:
git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Aunque enumera los archivos, también incluye información de diferencias no deseada para cada uno.
¿Hay otro comando de git
que proporcione solo la lista que quiero, de modo que pueda evitar analizarla desde la salida de git show
?
Esto debería funcionar:
git status
Esto mostrará lo que no está en escena y lo que está en escena.
Hay un truco simple para ver como una lista de archivos, solo agregue :
después del hash.
git show 9d3a52c474:
A continuación, puede perforar,
git show 9d3a52c474:someDir/someOtherDir
Si golpea un archivo obtendrá la versión en bruto del archivo; que a veces es lo que desea si solo está buscando una buena referencia o piezas clave de código (las diferencias pueden hacer que todo sea un desastre),
git show 9d3a52c474:someDir/someOtherDir/somefile
El único inconveniente de este método es que no muestra fácilmente un árbol de archivos.
Intenta este comando para nombre y cambios número de línea
git show --stat <commit-hash>
solo mostrar nombres de archivos
git show --stat --name-only <commit-hash>
para obtener el último hash de confirmación, entonces intente este comando
git log -1
o para todos los git log
La forma mas simple:
git show --stat (hash)
Es más fácil de recordar y le dará toda la información que necesita.
Si realmente desea solo los nombres de los archivos, puede agregar la opción --name-only
.
git show --stat --name-only (hash)
Listar los archivos que cambiaron en un commit:
git diff --name-only SHA1^ SHA1
Esto no muestra mensajes de registro, nuevas líneas adicionales o cualquier otro desorden. Esto funciona para cualquier compromiso, no solo el actual. No estoy seguro de por qué no se ha mencionado todavía, así que lo estoy agregando.
Lo uso para obtener la lista de archivos modificados entre dos conjuntos de cambios:
git diff --name-status <SHA1> <SHA2> | cut -f2
Me gusta esto:
git diff --name-status <SHA1> <SHA1>^
Me gusta usar
git show --stat <SHA1>^..<SHA2>
Mostrar el registro.
COMMIT puede estar en blanco ("") o el sha-1 o el sha-1 acortado.
git log COMMIT -1 --name-only
Esto mostrará una lista de los archivos, muy útil para su posterior procesamiento.
git log COMMIT -1 --name-only --pretty=format:"" | grep "[^/s]"
Pensé que compartiría un resumen de mi alias ... también me parece muy útil usar ''zsh'' con las claves de git it chroma todo muy bien y le dice que quiere que las sucursales estén en todo momento cambiando el símbolo del sistema.
Para los que cubren desde SVN, encontrará esto útil: (esta es una combinación de ideas de diferentes subprocesos, solo tengo el mérito de saber cómo usar copiar / pegar)
.gitconfig:
ls = log --graph --pretty=format:''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset'' --abbrev-commit --date=relative --name-status
>>git ls
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker|
| A icds.xcodeproj/project.pbxproj
| A icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata
| A icds/AppDelegate.m
| A icds/Assets.xcassets/AppIcon.appiconset/Contents.json
* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker|
| D Classes/AppInfoViewControler.h
| D Classes/AppInfoViewControler.m
| D Classes/CurveInstrument.h
.gitconfig:
lt = log --graph --pretty=format:''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset'' --abbrev-commit --date=relative
>>git lt
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker
* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker
* 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker
* 7373b5e - clean up files from old version (11 hours ago) Jim Zucker
* 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker
.gitconfig
lt = log --graph --pretty=format:''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset'' --abbrev-commit --date=relative
>> git lt
commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c
Author: Jim Zucker <[email protected]>
Date: Tue Dec 1 22:23:10 2015 -0800
New Files from xcode 7
A icds.xcodeproj/project.pbxproj
A icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata
commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d
Author: Jim Zucker <[email protected]>
Date: Tue Dec 1 22:17:00 2015 -0800
Move everything to old
D Classes/AppInfoViewControler.h
D Classes/AppInfoViewControler.m
D Classes/CurveInstrument.h
D Classes/CurveInstrument.m
Personalmente uso la combinación de --stat y --oneline con el comando show :
git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD
Si no le gustan / no desea las estadísticas de adición / eliminación, puede reemplazar --stat con --name -only
git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD
Recientemente tuve que listar todos los archivos cambiados entre dos confirmaciones. Así que usé este comando (también * específico de nix)
git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq
Actualización : O como Ethan señala a continuación
git diff --name-only START_COMMIT..END_COMMIT
El uso de --name-status
también incluirá el cambio (agregado, modificado, eliminado, etc.) al lado de cada archivo
git diff --name-status START_COMMIT..END_COMMIT
Si desea obtener la lista de archivos modificados:
git diff-tree --no-commit-id --name-only -r <commit-ish>
Si desea obtener una lista de todos los archivos en una confirmación, puede utilizar
git ls-tree --name-only -r <commit-ish>
Solo asumiré que gitk
no es deseado para esto. En ese caso, pruebe git show --name-only <sha>
.
También hay git whatchanged
, que es más bajo que el git log
NAME
git-whatchanged - Show logs with difference each commit introduces
Envía el resumen de confirmación con una lista de archivos debajo con sus modos y si se agregaron ( A
), eliminaron ( D
) o modificaron ( M
);
$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363
Daría algo como:
commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <[email protected]>
Date: Tue Sep 29 17:23:22 2015 +0200
added fb skd and XLForm
:000000 100644 0000000... 90a20d7... A Pods/Bolts/Bolts/Common/BFCancellationToken.h
:000000 100644 0000000... b5006d0... A Pods/Bolts/Bolts/Common/BFCancellationToken.m
:000000 100644 0000000... 3e7b711... A Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h
:000000 100644 0000000... 9c8a7ae... A Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m
:000000 100644 0000000... bd6e7a1... A Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h
:000000 100644 0000000... 947f725... A Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m
:000000 100644 0000000... cf7dcdf... A Pods/Bolts/Bolts/Common/BFDefines.h
:000000 100644 0000000... 02af9ba... A Pods/Bolts/Bolts/Common/BFExecutor.h
:000000 100644 0000000... 292e27c... A Pods/Bolts/Bolts/Common/BFExecutor.m
:000000 100644 0000000... 827071d... A Pods/Bolts/Bolts/Common/BFTask.h
...
Sé que esta respuesta no coincide realmente "sin información extraña", pero sigo pensando que esta lista es más útil que los nombres de archivo.
Tambien puedes hacer
git log --name-only
y puede navegar a través de varios confirmaciones, mensajes de confirmación y los archivos modificados.
Escribe q para recuperar tu aviso.
Una combinación de " git show --stat
" (gracias Ryan) y un par de comandos sed deben recortar los datos por ti:
git show --stat <SHA1> | sed -n "/ [/w]/*|/p" | sed "s/|./*$//"
Eso producirá sólo la lista de archivos modificados.
Use un comando simple de una línea, si solo quiere que se cambie la lista de archivos en el último compromiso:
git diff HEAD~1 --name-only
Utilizar
git log --name-status
Esto le mostrará el ID de compromiso, el mensaje, los archivos modificados y si se modificó, creó, agregó o eliminó. Algo de un comando todo en uno.
Yo uso un alias cambiado con bastante frecuencia. Para configurarlo:
git config --global alias.changed ''show --pretty="format:" --name-only''
entonces:
git changed (lists files modified in last commit)
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)
Comandos similares que pueden ser útiles:
git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only
Modo preferido (porque es un comando de plomería ; destinado a ser programático):
$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js
Otra forma (menos preferida para las secuencias de comandos, porque es un comando de porcelana ; destinado a ser orientado al usuario)
$ git show --pretty="" --name-only bd61ad98
index.html
javascript/application.js
javascript/ie6.js
- El
--no-commit-id
suprime la salida del ID de commit. - El argumento
--pretty
especifica una cadena de formato vacía para evitar el cruce al principio. - El argumento
--name-only
muestra solo los nombres de archivo que se vieron afectados (Gracias Hank). - El argumento
-r
es recursionar en sub-árboles
OK, hay un par de formas de mostrar todos los archivos en una confirmación en particular ...
Para reducir la información y mostrar solo los nombres de los archivos confirmados, simplemente puede agregar - --name-only
o - --name-status
indicador de --name-status
..., estos indicadores solo le muestran los nombres de archivo que son diferentes de los confirmaciones anteriores a medida que usted querer...
Así que puedes hacer git diff
seguido de --name-only
, con dos hashes de confirmación después de <sha0> <sha1>
, algo como a continuación:
git diff --name-only 5f12f15 kag9f02
También creo la imagen de abajo para mostrar todos los pasos a seguir en estas situaciones:
Usando el comando estándar git diff (también es bueno para scripting):
git diff --name-only <sha>^ <sha>
Si desea también el estado de los archivos modificados:
git diff --name-status <sha>^ <sha>
Esto funciona bien con las combinaciones de combinación.
$ git log 88ee8^..88ee8 --name-only --pretty="format:"
git show --name-only commitCodeHere
git show HEAD@{0}
funciona bien para mi