czy możliwe jest `git status` tylko zmodyfikowanych plików?

173

Czy można git statuswyświetlać i wyświetlać tylko zmodyfikowane pliki?

Problem polega na tym, że mam zbyt wiele plików w fazie przejściowej, których nie chcę w tej chwili zatwierdzać ani gitignore i nie mogę przewijać w górę. Mam ustawiony limit przewijania w systemie Ubuntu.

chrisjlee
źródło
1
Jak masz limit przewijania? Domyślnie git statuswywoła pager.
Lily Ballard
Przepraszamy, limit przewijania jest ustawiony na 512 linii na moim komputerze. Myślę, że mógłbym to zmienić; ale wolałby jedno wierszowe polecenie do przeglądania właśnie zmodyfikowanych plików w statusie, ponieważ GD / imagecache ostatecznie wygeneruje jeszcze więcej plików.
chrisjlee
1
Racja ... chodzi mi o to, że pager nie używa przewijania twojego terminala.
Lily Ballard
Czy jest coś złego w po prostu grepowaniu za tym, co uważasz za interesujące? Użyj --shortlub, --porcelainaby uzyskać jednowierszowe wersje statusu.
torek
2
Jeszcze jedna kwestia, oparta na sugestii użycia git ls-files -m: które modyfikacje Cię interesują, wystawiane, niestacjonarne czy jedno i drugie?
torek

Odpowiedzi:

268

Nie możesz tego zrobić git status, ale możesz użyć git ls-files -mdo pokazania wszystkich zmodyfikowanych plików.

Lily Ballard
źródło
6
Aby inni wiedzieli, pokaże tylko pliki, które zostały zmodyfikowane, ale nie zostały jeszcze umieszczone w poczekalni.
Gerry
11
Chociaż jest to akceptowana odpowiedź, zawiera niedokładne informacje. Możesz "'stan git' tylko zmodyfikowane pliki" z git status | grep modifiedtak, jak wskazuje user23186 w swojej odpowiedzi.
K. Alan Bates
9
Dla mnie git ls-files -mnic nie pokazuje, ale git status | grep modifieddziała.
Sandeepan Nath
1
Jak zauważyli inni, pokazuje to tylko pliki niestacjonarne. Jeśli chcesz wyświetlić zarówno pliki
niestabilizowane, jak i tymczasowe
1
@thdoan Istnieje wiele opcji wyświetlania plików w fazie przejściowej, chociaż to konkretne pytanie wydaje się chcieć jawnie wykluczyć pliki w fazie przejściowej. git diff --name-only --diff-filter=M HEADpokaże tylko zmodyfikowane pliki, zarówno dla etapów, jak i niestacjonarnych, chociaż powinieneś sprawdzić dokumentację, --diff-filteraby zobaczyć, jakie inne typy filtrów chcesz dodać.
Lily Ballard
57

Wygląda na to, git status -unoże pokaże tylko pliki, które śledzi git, bez pokazywania niczego innego w katalogu. Nie jest to dokładnie to, o co prosiłeś, ale być może daje to samo (uzyskanie czytelnej listy plików, które śledzą git).

TomNysetvold
źródło
1
git status -u nonie pokazuje (1) śledzonych plików, które są modyfikowane, ani (2) śledzonych plików, które są przemieszczane. Sprawdziłem to w wersjach git 1.8.5.2 i 1.9.4.
mxxk
2
@TomNysetvold, możesz właściwie mieć na myśli git status -uno( stackoverflow.com/questions/7008546/ ... )
mxxk
29
git status -s | awk '{if ($1 == "M") print $2}'
Carl Bäckström
źródło
3
Lubawk '$1 == "M" { print $2 }'
Calpau
29

W przypadku zmodyfikowanych plików:

git status | grep modified:
Lanca
źródło
1
Tak przydatne, stworzyłem do tego alias:git config --global alias.modified '!git status | grep modified:'
Richard Parnaby-King
15

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

ZeroGraviti
źródło
2
Polecam te filtry: git diff --cached --name-only --diff-filter=ACMRco oznacza pliki dodane, skopiowane, zmodyfikowane i zmienione.
qwertzguy
7

git diff --name-only działa też.

mpelzsherman
źródło
3

Szukałem tych samych informacji i znalazłem następujące podaje zmodyfikowane pliki:

git status -uno
Tectrendz
źródło
2
git status -uno --porcelaindodaje ładne wyjście dla parsowania skryptu
pprzemek
3

Możesz użyć

$ git status -uno 

aby wyświetlić tylko zmodyfikowane pliki.

Karthik
źródło
3

Problem polega na tym, że mam zbyt wiele plików w fazie przejściowej, których nie chcę w tej chwili zatwierdzać ani gitignore i nie mogę przewijać w górę.

Chociaż może to nie odpowiadać bezpośrednio na pytanie o wyświetlanie tylko zmodyfikowanych plików, może pomóc ograniczyć liczbę plików, które są na liście.

Możesz przekazać ścieżkę do, git statusaby ograniczyć dane wyjściowe do określonego folderu w repozytorium.

Na przykład:

git status app
git status spec
git status src/components
BillFienberg
źródło
2

Aby wyświetlić listę zmodyfikowanych plików, użyj:

git ls-files -m

Jeśli chcesz tylko nazwę basename (bez ścieżki), możesz przesłać każdy wynik do polecenia basename za pomocą xargs, linia po linii:

git ls-files -m | xargs -L 1 basename
briggySmalls
źródło
1

Używam tego polecenia:

$ git status -uno -sb

Wynik wygląda następująco:

## master...origin/master
 M GNUmakefile
 M include/mp4v2/project.h
SebMa
źródło
0

Używam git cola. Jest to prosty i elegancki klient interfejsu użytkownika, który pokaże zmodyfikowane pliki i zapewni porównanie zmian, które wprowadziłeś.

git colazapewnia graficzny interfejs użytkownika, w którym możesz wizualizować zmodyfikowane pliki, które przygotowałeś, a nawet te, których nie śledzisz. Twoje pytanie dotyczyło używania statusu git tylko moim zdaniem, ale pomyślałem, że git cola może pomóc, gdy to i inne rzeczy też. Sprawdź tę stronę internetową, aby uzyskać więcej informacji: git-cola.github.com/screenshots.html

n_x_l
źródło
1
Czy mógłbyś podać, jak to się ma do mojej odpowiedzi, biorąc pod uwagę, że nie znam tej git coli. np. zrzuty ekranu czy więcej szczegółów?
chrisjlee,
to dlatego został odrzucony? :) W każdym razie git cola zapewnia GUI, w którym możesz wizualizować, które pliki zmodyfikowałeś, które wystawiłeś, a nawet te, których nie śledzisz. Twoje pytanie dotyczyło używania statusu git tylko moim zdaniem, ale pomyślałem, że git cola może pomóc, gdy to i inne rzeczy też. Sprawdź tę stronę internetową, aby uzyskać więcej informacji: git-cola.github.com/screenshots.html
n_x_l
Jak zmienić język interfejsu Coli?
ziyuang
0

Jeśli chcesz wyświetlić listę zmodyfikowanych plików, możesz to zrobić:

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

David Hernandez
źródło
0

Aby wyświetlić listę wszystkich zmodyfikowanych plików, użyj:

git show --stat --oneline HEAD
Fayaz
źródło
0

Wszystkie świetne odpowiedzi; po prostu FEI, "git checkout" (przełączanie do lub w tej samej gałęzi) wydaje się pokazywać tylko zmodyfikowane pliki.

user1172173
źródło
0

System operacyjny: windows

Następujące polecenie wyświetli wszystkie wiersze zawierające „zmodyfikowano:” , „zmieniono nazwę:” lub „nowy plik:”

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

Jeśli chcesz określić typ pliku: (na przykład *.py *.ini)

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

Jeśli uważasz, że pisanie jest zbyt trudne:

  1. utwórz plik wsadowy (na przykład st.bat:)

  2. zapisz zawartość w następujący sposób:

    @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. dodaj ścieżkę środowiska zawierającą plik wsadowy. ( st.bat)

  4. stosowanie

    st.bat "*.py *.ini"
    

    (uwaga: jeśli typ> 1, należy dodać średnik)

System operacyjny: LINUX

jak mówi @Lance, możesz spróbować

git status | grep modified:

Carson
źródło