Come elencare tutti i file in un commit?

Sto cercando un semplice comando git che fornisce un elenco ben formattato di tutti i file che facevano parte del commit dato da un hash (SHA1), senza informazioni estranee.

Ho provato:

 git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d 

Sebbene elenchi i file, include anche le informazioni sulla differenza indesiderate per ciascuno.

C’è un altro comando git che fornirà solo la lista che voglio, in modo da evitare di analizzarlo dall’output di git show ?

    Modo preferito (perché è un comando idraulico , pensato per essere programmatico):

     $ git diff-tree --no-commit-id --name-only -r bd61ad98 index.html javascript/application.js javascript/ie6.js 

    Un altro modo (meno preferito per gli script, perché è un comando di porcellana , pensato per essere rivolto all’utente)

     $ git show --pretty="" --name-only bd61ad98 index.html javascript/application.js javascript/ie6.js 

    • --no-commit-id sopprime l’output dell’ID commit.
    • L’argomento --pretty specifica una stringa di formato vuota per evitare il cruft all’inizio.
    • L’argomento --name-only mostra solo i nomi dei file che sono stati interessati (Grazie Hank).
    • L’argomento -r è di ricorrere in sotto-alberi

    Se vuoi ottenere l’elenco dei file modificati:

     git diff-tree --no-commit-id --name-only -r  

    Se si desidera ottenere l’elenco di tutti i file in un commit, è ansible utilizzare

     git ls-tree --name-only -r  

    Immagino solo che gitk non sia desiderato per questo. In tal caso, prova git show --name-only .

    Personalmente utilizzo la combinazione di –stat e –oneline con il comando show :

     git show --stat --oneline HEAD git show --stat --oneline b24f5fb git show --stat --oneline HEAD^^..HEAD 

    Se non ti piace / vuoi le statistiche di aggiunta / rimozione, puoi sostituire –stat con –name-only

     git show --name-only --oneline HEAD git show --name-only --oneline b24f5fb git show --name-only --oneline HEAD^^..HEAD 

    Recentemente ho avuto bisogno di elencare tutti i file modificati tra due commit. Quindi ho usato questo comando (anche * nix specifico)

     git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq 

    Aggiornamento : O come Ethan indica sotto

     git diff --name-only START_COMMIT..END_COMMIT 

    L’uso di --name-status includerà anche la modifica (aggiunta, modificata, cancellata, ecc.) Accanto a ciascun file

     git diff --name-status START_COMMIT..END_COMMIT 

    Puoi anche fare

     git log --name-only 

    e puoi sfogliare vari commit, messaggi di commit e file modificati.

    Digita q per ottenere il tuo prompt indietro.

    La forma più semplice:

    git show --stat (hash)

    È più facile da ricordare e ti darà tutte le informazioni di cui hai bisogno.

    Se vuoi veramente solo i nomi dei file, puoi aggiungere l’opzione --name-only .

    git show --stat --name-only (hash)

    Io uso un alias modificato abbastanza spesso. Per configurarlo:

     git config --global alias.changed 'show --pretty="format:" --name-only' 

    poi:

     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) 

    Comandi simili che potrebbero essere utili:

     git log --name-status --oneline (very similar, but shows what actually happened M/C/D) git show --name-only 

    Usando il comando standard git diff (buono anche per lo scripting):

     git diff --name-only ^  

    Se si desidera anche lo stato dei file modificati:

     git diff --name-status ^  

    Funziona bene con l’unione di commit.

     $ git log 88ee8 ^ .. 88ee8 --name-only --pretty = "format:"
    

    OK, ci sono un paio di modi per mostrare tutti i file in un particolare commit …

    Per ridurre le informazioni e mostrare solo i nomi dei file che sono stati impegnati, puoi semplicemente aggiungere --name-only o --name-status flag …, questi flag ti mostreranno solo i nomi dei file che sono diversi dai precedenti commit mentre volere…

    Quindi puoi fare git diff seguito da --name-only , con due commit hash dopo , qualcosa di simile qui sotto:

     git diff --name-only 5f12f15 kag9f02 

    Creo anche l’immagine qui sotto per mostrare tutti i passaggi da seguire in queste situazioni:

    git diff --name-only 5f12f15 kag9f02

    Lo uso per ottenere l’elenco dei file modificati tra due changeset:

     git diff --name-status   | cut -f2 

    Mi piace usare

     git show --stat ^.. 
     git show --name-only commitCodeHere 

    Mi piace questo:

     git diff --name-status  ^ 

    C’è anche git whatchanged , che è più basso di git log

     NAME git-whatchanged - Show logs with difference each commit introduces 

    Emette il riepilogo del commit con un elenco di file al di sotto di esso con le loro modalità e se è stato aggiunto ( A ), cancellato ( D ) o modificato ( M );

     $ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363 

    Darebbe qualcosa come:

     commit f31a441398fb7834fde24c5b0c2974182a431363 Author: xx  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 ... 

    So che questa risposta in realtà non corrisponde “senza informazioni estranee”. Ma continuo a pensare che questa lista sia più utile dei soli nomi di file.

    Usa un semplice comando di una riga, se vuoi solo l’elenco dei file modificati nell’ultimo commit:

     git diff HEAD~1 --name-only 

    Elenca i file modificati in un commit:

     git diff --name-only SHA1^ SHA1 

    Questo non mostra messaggi di log, extra newline o qualsiasi altra confusione. Questo funziona per qualsiasi commit, non solo quello corrente. Non sono sicuro del motivo per cui non è stato ancora menzionato, quindi lo aggiungo.

    Uso

     git log --name-status 

    Questo mostrerà l’id, il messaggio, i file modificati e se è stato modificato, creato, aggiunto o cancellato. Un po ‘di un comando all-in-one.

    Mostra il registro.

    COMMIT può essere vuoto (“”) o sha-1 o sha-1 accorciato.

     git log COMMIT -1 --name-only 

    Questo elencherà solo i file, molto utili per ulteriori elaborazioni.

     git log COMMIT -1 --name-only --pretty=format:"" | grep "[^\s]" 

    Ho trovato una risposta perfetta a questo:

     git show --name-status --oneline  

    In modo che io possa sapere

     which files were just modified M Which files were newly added , A Which files were deleted , D 

    Una combinazione di ” git show --stat ” (grazie Ryan) e un paio di comandi sed dovrebbero tagliare i dati per te:

     git show --stat  | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//" 

    Ciò produrrà solo la lista dei file modificati.

    C’è un semplice trucco da visualizzare come elenco di file, basta aggiungere : dopo l’hash.

     git show 9d3a52c474: 

    Puoi quindi eseguire il drill-in,

     git show 9d3a52c474:someDir/someOtherDir 

    Se si preme un file, si ottiene la versione originale del file; che a volte è quello che vuoi se stai cercando solo una bella referenza o pezzi chiave di codice (le differenze possono rendere tutto un casino),

     git show 9d3a52c474:someDir/someOtherDir/somefile 

    L’unico inconveniente di questo metodo è che non mostra facilmente un albero di file.

     git show HEAD@{0} 

    funziona bene per me

    Ho pensato di condividere un riassunto del mio pseudonimo .. inoltre trovo che usare ‘zsh’ grande con git it chroma keys tutto bene e ti dice che voglio il ramo sono in tutte le volte cambiando il prompt dei comandi.

    Per quelli che trattano da SVN lo troverai utile: (questa è una combinazione di idee provenienti da diversi thread, mi rendo solo merito di sapere come usare il copia / incolla)

     .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  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  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 

    Questo dovrebbe funzionare:

     git status 

    Questo mostrerà ciò che non è messo in scena e ciò che è messo in scena.