2009-11-29 9 views
22

Esiste un modo per ottenere un elenco di file che verranno confermati quando si digita quanto segue?Come faccio a elencare solo i file che verrebbero inseriti?

git commit -m "my changes" 

elenchi di stato git troppo. Potrei spogliare tutte le parole, ma preferirei di no. E non voglio essere informato sui file non tracciati.

Ho provato

git ls-files -md 

ma che non mostra i file che sono stati recentemente aggiunti, ma non ancora impegnati.

Sto cercando la stessa uscita si otterrebbe da

svn status -q 

Per esempio $ svn stato -q
Un file.py
M dir/database.py
M inizio .py

risposta

4

Si può provare:

git diff --name-status 

ottengo il seguente:

$ git diff --name-status 
M  README.markdown 

Senza i file non monitorate.

+2

Questo non è corretto. La domanda è: "cosa verrà commesso quando dico' git commit -m message' ". Questo dà le differenze tra l'albero di lavoro e la cache che è più vicino a ciò che * non sarà * impegnato. –

26

Questo è quello che stavo cercando. Grazie a notnoop per il vantaggio di cui avevo bisogno. Volevo pubblicare la mia soluzione nel caso in cui aiuti gli altri.

git diff HEAD --name-only 

Dal momento che intendevo fare

git commit -s -F mesage.txt 

con i file trovati nella prima riga.

Il mio intento è quello di creare un piccolo sistema che ignori totalmente l'indice, cioè che non ho mai bisogno di fare git add. (Da quanto ho capito, l'indice è utile durante la creazione di patch, che non è affatto la norma nel mio flusso di lavoro.)

+2

non intendi 'git diff --cached --name-only'? il 'diff HEAD' mostrerà i file registrati per ultimi e non inviati. il file '--cached 'mostrerà i file che saranno impegnati quando si esegue' git commit'. – gcb

+0

'git diff --staged --name-only' funziona anche. A seconda di come pensi a git potresti voler usare --staged [sinonimo] (https://stackoverflow.com/a/39877896) invece di --cached. – SpeedCoder5

8

Questo comando ti dirà quali file nell'area di indice/cache/staging differiscono da quelli TESTO corrente (e se si tratta di aggiunte, modifiche o cancellazioni) che sono le modifiche che verranno commesse se si utilizza git commit senza percorsi espliciti o l'opzione -a. Il formato è ragionevolmente simile all'uscita svn status mostrata.

git diff --cached --name-status 
3

so OP originale ha chiesto di evitare git status, ma ho sentito questo sarebbe bello lasciare ai posteri (cioè altre persone che non condividono le prenotazioni di OP).

git status --porcelain | grep -v '^[ |??]' | sed -e 's/[A-Z] *//' 

Il mio ragionamento è che git status --porcelain sembra sia stato costruito proprio per questo tipo di dilemma ...

fonte: http://git-scm.com/docs/git-status.html

EDIT: Si può scegliere di non usare sed -e 's/[A-Z] *//' se si desidera mantenere i tag di modifica del Git davanti ad ogni nome di file.

+0

+1. Sono d'accordo che 'git status --porcelain' può essere usato in uno script. Ho documentato tanto in http://stackoverflow.com/a/6978402/6309, dicendo che "La nuova opzione \ [' --porcelain' \] rende il formato di output nativo del comando per emettere output più facile da gestire Porcellana." – VonC

+0

Questo non sembra elencare i file effettivi che verrebbero inseriti durante una git push (e che sono stati messi in scena da un git add/commmit) – Paul

Problemi correlati