è possibile `git status` solo i file modificati?


173

È possibile git statuse mostrare solo i file modificati?

Il problema è che ho troppi file in scena che non voglio impegnare o gitignore al momento e non riesco a scorrere verso l'alto. Ho un limite di scorrimento impostato su Ubuntu.


1
Come hai un limite di scorrimento? Per impostazione predefinita, git statusinvocherà il cercapersone.
Lily Ballard

Spiacenti, il limite di scorrimento è impostato su 512 righe sulla mia macchina. Immagino di poterlo cambiare; ma preferirei un comando a una riga per visualizzare solo i file modificati nello stato perché GD / imagecache alla fine genererà ancora più file.
chrisjlee,

1
Giusto ... il mio punto è che il cercapersone non usa lo scrollback del tuo terminale.
Lily Ballard,

Qualcosa non va con il solo grepping per ciò che trovi interessante? Utilizzare --shorto --porcelainper ottenere versioni di una riga dello stato.
Torek,

2
Un altro punto, basato sul suggerimento da usare git ls-files -m: di quale modifica ti interessa, messa in scena, non messa in scena o entrambe?
Torek,

Risposte:


268

Non puoi farlo con git status, ma puoi usare git ls-files -mper mostrare tutti i file modificati.


6
Solo così gli altri sanno, questo mostrerà solo i file che sono stati modificati senza essere ancora messi in scena.
Gerry,

11
Sebbene questa sia la risposta accettata, contiene informazioni inaccurate. Puoi "'git status' solo i file modificati" git status | grep modifiedproprio come indicato dall'utente23186 nella loro risposta.
K. Alan Bates,

9
Per me, git ls-files -mnon mostra nulla ma git status | grep modifiedfunziona.
Sandeepan Nath,

1
Come altri hanno sottolineato, questo mostra solo file non messi in scena. Se si vuole mostrare sia Unstaged e file messo in scena, questa è la risposta migliore che ho visto: stackoverflow.com/a/39994894/452587
thdoan

1
@thdoan Esistono diverse opzioni per mostrare i file in fasi, anche se questa particolare domanda sembra voler escludere esplicitamente i file in fasi. git diff --name-only --diff-filter=M HEADmostrerebbe solo i file modificati sia per lo stage che per lo stage, anche se dovresti controllare i documenti --diff-filterper vedere quali altri tipi di filtro potresti voler aggiungere.
Lily Ballard,

58

Sembra che git status -unoti mostrerà solo i file che git sta monitorando, senza mostrare nient'altro nella directory. Non esattamente quello che hai chiesto, ma forse realizza la stessa cosa (ottenere un elenco di file leggibile che rintraccia le tracce).


1
git status -u nonon mostra (1) file tracciati che vengono modificati, né (2) file tracciati che vengono messi in scena. Ho verificato questo con le versioni 1.8.5.2 e 1.9.4 di git.
mxxk,

2
@TomNysetvold, si può effettivamente media git status -uno( stackoverflow.com/questions/7008546/... )
mxxk


29

Per i file modificati:

git status | grep modified:

1
Così utile ho creato un alias per questo:git config --global alias.modified '!git status | grep modified:'
Richard Parnaby-King,

15

git diff --name-only --diff-filter=M


2
Consiglio quei filtri: git diff --cached --name-only --diff-filter=ACMRquali file aggiunti, copiati, modificati e rinominati.
qwertzguy,


3

Stavo cercando le stesse informazioni e ho trovato i seguenti file modificati:

git status -uno

2
git status -uno --porcelainaggiunge un bel output per lo script di analisi
pprzemek,

3

Puoi usare

$ git status -uno 

per elencare solo i file modificati.


3

Il problema è che ho troppi file in scena che non voglio impegnare o gitignore al momento e non riesco a scorrere verso l'alto.

Anche se questo potrebbe non rispondere direttamente alla domanda di elencare solo i file modificati, può aiutare a limitare il numero di file elencati.

È possibile passare un percorso per git statuslimitare l'output a una cartella specifica nel repository.

Per esempio:

git status app
git status spec
git status src/components

2

Per elencare i file modificati usare:

git ls-files -m

Se si desidera solo il nome base (nessun percorso), è possibile reindirizzare ciascun risultato al comando basename utilizzando xargs, riga per riga:

git ls-files -m | xargs -L 1 basename

1

Io uso questo comando:

$ git status -uno -sb

E l'output è simile al seguente:

## master...origin/master
 M GNUmakefile
 M include/mp4v2/project.h

0

Io uso git cola. È un client UI semplice ed elegante che ti mostrerà i file modificati e ti fornirà una panoramica come le riprese delle modifiche apportate.

git colati fornisce una GUI in cui puoi visualizzare quali file hai modificato, quali messi in scena e anche quelli che non segui. La tua domanda era di usare lo stato di git solo io credo, ma pensavo che git cola potesse aiutare quando anche quello e altre cose. Controlla questa pagina web da maggiori informazioni: git-cola.github.com/screenshots.html


1
Potresti fornire in che modo si riferisce alla mia risposta dato che non ho familiarità con questa Git Cola. ad esempio schermate o maggiori dettagli?
chrisjlee,

è per questo che è stato downvoted? :) Comunque, git cola ti fornisce una GUI in cui puoi visualizzare quali file hai modificato, quali hai messo in scena e anche quelli che non segui. La tua domanda era di usare lo stato git solo io credo, ma pensavo che git cola potesse aiutare quando anche quello e altre cose. Controlla questa pagina web da maggiori informazioni: git-cola.github.com/screenshots.html
n_x_l

Come cambiare la lingua dell'interfaccia di cola?
ziyuang,

0

Se vuoi elencare i file modificati , puoi farlo:

git log -n1 --oneline --name-status | grep '^M'


0

Per elencare tutti i file modificati usare:

git show --stat --oneline HEAD

0

Tutte grandi risposte; solo FEI, "git checkout" (passando allo stesso ramo) sembra mostrare solo i file modificati.


0

Sistema operativo: windows

Il seguente comando visualizzerà tutte le righe contenenti "modificato:" , "rinominato:" o "nuovo file:"

git status | findstr "modified: renamed: new file:"

Se si desidera specificare il tipo di file: (ad esempio *.py *.ini)

git status *.py *.ini | findstr "modified: renamed: new file:"

Se pensi che sia troppo difficile scrivere così tanto:

  1. creare un file batch (ad esempio st.bat:)

  2. scrivere i contenuti come segue:

    @echo off
    :: st.bat  (this line doesn't necessarily. ( just let you know the scripts name.))
    git status %~1 | findstr "modified: renamed: new file:"
    
  3. aggiungi il percorso dell'ambiente che contiene il tuo file batch. ( st.bat)

  4. uso

    st.bat "*.py *.ini"
    

    (nota: se digitare> 1, allora è necessario aggiungere il punto e virgola)

Sistema operativo: LINUX

come @Lance dice che puoi provare

git status | grep modified:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.