чи можна `git status` лише модифіковані файли?


173

Чи можна git status показувати та показувати лише змінені файли?

Проблема полягає в тому, що у мене занадто багато поетапних файлів, які я не хочу на даний момент робити або gitignore, і я не можу прокрутити вгору. На Ubuntu встановлено обмеження прокрутки.


1
Як у вас обмеження прокрутки? За замовчуванням git statusбуде викликати пейджер.
Лілі Баллард

На жаль, на моїй машині встановлено обмеження прокрутки 512 рядків. Я здогадуюсь, я міг би це змінити; але я вважаю за краще однорядну команду для перегляду тільки змінених файлів у статусі, оскільки GD / imagecache з часом генерує ще більше файлів.
chrisjlee

1
Правильно ... моя думка полягає в тому, що пейджер не використовує прокрутку вашого термінала.
Лілі Баллард

Щось не так у тому, щоб просто причепитися до того, що вам здається цікавим? Використовуйте --shortабо, --porcelainщоб отримати однолінійні версії статусу.
torek

2
Ще один момент, заснований на пропозиції використовувати git ls-files -m: яку модифікацію ви хвилюєте, інсценізуєте, нестатуєте або обидва?
torek

Відповіді:


268

Ви не можете цього зробити git status, але ви можете використовувати git ls-files -mдля показу всіх змінених файлів.


6
Так що інші знають, це покаже лише файли, які були змінені, але ще не ставились.
Геррі

11
Хоча це прийнята відповідь, вона має неточну інформацію. Ви можете "" отримати статус "лише модифікованих файлів", git status | grep modifiedяк вказано у своїй відповіді user23186.
К. Алан Бейтс

9
Для мене git ls-files -mнічого не показує, але git status | grep modifiedпрацює.
Сандепіан Нат

1
Як зазначали інші, це показує лише нефіксовані файли. Якщо ви хочете , щоб показати , як unstaged І поставив файли, це найкраща відповідь , який я бачив: stackoverflow.com/a/39994894/452587
thdoan

1
@thdoan Існує ряд варіантів відображення поетапних файлів, хоча, як видається, саме цей питання хоче явно виключити поетапні файли. git diff --name-only --diff-filter=M HEADвідображатиметься лише змінені файли як для поетапних, так і для нестандартних, хоча ви повинні перевірити документи, --diff-filterщоб побачити, які ще типи фільтрів ви можете додати.
Лілі Баллард

57

Схоже, git status -unoбуде показано лише ті файли, які відстежує git, не показуючи нічого іншого в каталозі. Не зовсім те, про що ви просили, але, можливо, виконує те саме (отримання списку файлів, що містять доріжки, що читаються за довжиною).


1
git status -u noне відображає (1) відстежуваних файлів, які модифікуються, а також (2) відстежуваних файлів, які ставляться поетапно. Я перевірив це у версіях git 1.8.5.2 та 1.9.4.
mxxk

2
@TomNysetvold, ви можете на самому справі середня git status -uno( stackoverflow.com/questions/7008546 / ... )
mxxk



15

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


2
Я рекомендую ті фільтри: у git diff --cached --name-only --diff-filter=ACMRяких додані, скопійовані, модифіковані та перейменовані файли.
qwertzguy


3

Я шукав ту саму інформацію і виявив, що надає змінені файли:

git status -uno

2
git status -uno --porcelainдодає приємний вихід для розбору сценарію
pprzemek

3

Можна використовувати

$ git status -uno 

список лише модифікованих файлів.


3

Проблема полягає в тому, що у мене занадто багато поетапних файлів, які я не хочу на даний момент робити або gitignore, і я не можу прокрутити вгору.

Хоча це може не відповісти безпосередньо на питання про перелік лише модифікованих файлів, це може допомогти обмежити кількість перелічених файлів.

Ви можете пройти шлях до git statusобмеження виводу в певній папці репо.

Наприклад:

git status app
git status spec
git status src/components

2

Для списку модифікованих файлів використовуйте:

git ls-files -m

Якщо ви хочете лише базове ім'я (немає шляху), ви можете передавати кожен результат команді basename, використовуючи xargs, рядок за рядком:

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

1

Я використовую цю команду:

$ git status -uno -sb

І вихід виглядає приблизно так:

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

0

Я використовую git cola. Це простий і елегантний клієнтський інтерфейс, який покаже вам змінені файли та надасть вам різні зміни зроблених вами змін.

git colaнадає графічний інтерфейс, де ви можете візуалізувати файли, які ви змінили, які ви інсценізували та навіть ті, які ви не відстежуєте. Ваше питання полягав у тому, щоб використовувати статус git лише я вважаю, але я вважав, що git cola може допомогти і тоді, і в інших речах. Перегляньте цю веб-сторінку з додатковою інформацією: git-cola.github.com/screenshots.html


1
Чи можете ви надати, як це стосується моєї відповіді? Я не знайомий з цією гіт-колою. наприклад, скріншоти чи більше деталей?
chrisjlee

це те, чому це було знято? :) У будь-якому випадку, git cola пропонує вам графічний інтерфейс, де ви можете візуалізувати файли, які ви змінили, які ви інсценізували та навіть ті, які ви не відстежуєте. Ваше питання полягав у тому, щоб використовувати статус git лише я вважаю, але я вважав, що git cola може допомогти і тоді, і в інших речах. Перегляньте цю веб-сторінку за додатковою інформацією: git-cola.github.com/screenshots.html
n_x_l

Як змінити мову інтерфейсу кола?
ziyuang

0

Якщо ви хочете перерахувати модифіковані файли, ви можете це зробити:

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


0

Щоб перелічити всі модифіковані файли, використовуйте:

git show --stat --oneline HEAD

0

Всі чудові відповіді; просто FEI, "git checkout" (перехід на ту або іншу гілку) відображає лише модифіковані файли.


0

ОС: windows

Наступна команда відобразить усі рядки, що містять "модифіковані:" , "перейменовані:" або "новий файл:"

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

Якщо ви хочете вказати тип файлу: (наприклад *.py *.ini)

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

Якщо ви думаєте, що надто багато проблем набрати так багато:

  1. створити пакетний файл (наприклад st.bat:)

  2. написати вміст наступним чином:

    @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. додати шлях середовища, який містить ваш пакетний файл. ( st.bat)

  4. використання

    st.bat "*.py *.ini"
    

    (зверніть увагу: якщо тип> 1, то слід додати крапку з комою)

ОС: LINUX

як @Lance каже, що ви можете спробувати

git status | grep modified:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.