2013-01-08 18 views
66

È in grado di mostrare modificato nome file solo con git log?Come mostrare il nome del file modificato solo con git log?

+0

Abbastanza simile: [Funzione Bash per trovare tutti i commit Git in cui un file (il cui nome corrisponde a un'espressione regolare) ha * modificato *] (http://stackoverflow.com/questions/28119379/bash-function-to-find -all-git-commits-in-cui-un-file-cui-nome-corrisponde-a-rege/28120305) – aliteralmind

risposta

106

Grazie per le vostre risposte , @mvp, @xero, ottengo ciò che voglio sia su entrambe le risposte.

git log --name-only 

o

git log --name-only --oneline 

in breve.

20

Questo dà quasi quello che ti serve:

git log --stat --oneline 

Commit ID + breve una linea rimane ancora, seguito da elenco dei file modificati da quel commit.

28

Immagino che potresti usare il flag --name-only. qualcosa di simile:

git log 73167b96 --pretty="format:" --name-only

Io personalmente uso git show per visualizzare i file modificati in un commit

git show --pretty="format:" --name-only 73167b96

(73167b96 potrebbe essere qualsiasi commettere nome/tag)

+3

questa soluzione è abbastanza semplice da avere SOLO l'elenco di file senza autore, data o messaggio di conferma informazioni – Labynocle

5

Se avete bisogno di nomi appena di file come:

dir/subdir/file1.txt 
dir/subdir2/file2.sql 
dir2/subdir3/file6.php 

(che io uso come fonte per tar comando) sarà necessario anche per filtrare i messaggi di commit.

Per fare questo ho utilizzare il comando seguente:

git log --name-only --oneline | grep -v '.{7} '

Grep comando esclude (-v param) ogni linea che inizia con sette simboli (che è la lunghezza del mio git hash per git log di comando) seguito dallo spazio. Quindi filtra ogni riga git hash message e lascia solo le righe con i nomi dei file.

Un miglioramento è utile per aggiungere uniq per rimuovere le righe duplicate in modo che appare come segue:

git log --name-only --oneline | grep -v '.{7} ' | uniq

+2

In Bash shell OSX, è necessario inserire i backslash prima delle parentesi. Ho anche aggiunto la corrispondenza iniziale alla linea e lo spazio per l'abbinamento. "git show --name-only --oneline | grep -v '^. \ {7 \} \ s'" – Geuis

16

mi sono imbattuto in qui in cerca di una risposta simile senza la restrizione "git log". Le risposte qui non mi ha dato quello che mi serviva, ma questo fatto così io aggiungo che nel caso in cui altri lo trovano utile:

git diff --name-only 

È possibile anche Coppia questo con standard di impegnarsi puntatori per vedere cosa è cambiato da un particolare commettere:

git diff --name-only HEAD~3 
git diff --name-only develop 
git diff --name-only 5890e37..ebbf4c0 

questo modo succinto i nomi di file solo che è grande per lo scripting.Per esempio:

git diff --name-only develop | while read changed_file; do echo "This changed from the develop version: $changed_file"; done 

#OR 

git diff --name-only develop | xargs tar cvf changes.tar 
6

Ora uso il seguente per ottenere l'elenco dei file modificati mio ramo corrente ha, paragonandolo al master (il confronto-in ramo è cambiata facilmente):

git log --oneline --pretty="format:" --name-only master.. | awk 'NF' | sort -u 

Prima, ho usato per fare affidamento su questo:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort -k 2,2 -u 

che emette un elenco dei soli file e il loro stato (aggiunto, modificato, cancellare d):

A foo/bar/xyz/foo.txt 
M foo/bor/bar.txt 
... 

L'opzione -k2,2 per l'ordinamento, rende ordina al percorso del file invece che il tipo di cambio (A, M, D,).

+1

Questa è letteralmente l'unica risposta che fornisce effettivamente la risposta alla domanda "solo nome file". – DrStrangepork

Problemi correlati