можно ли "git status" только измененные файлы?


173

Можно ли git statusи показывать только измененные файлы?

Проблема в том, что у меня слишком много промежуточных файлов, которые я не хочу коммитить или gitignore в данный момент, и я не могу прокрутить вверх. У меня установлен предел прокрутки в Ubuntu.


1
Как у вас есть предел прокрутки? По умолчанию git statusвызовет пейджер.
— Лили Баллард

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

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

Что-то не так с просто подбрасыванием всего, что вам интересно? Используйте --shortили, --porcelainчтобы получить однострочные версии статуса.
— Торек

2
Еще один момент, основанный на предложении использовать git ls-files -m: какие модификации вас волнуют, ставят, не ставят или оба?
— Торек

Ответы:


268

Вы не можете сделать это с git status, но вы можете использовать, git ls-files -mчтобы показать все измененные файлы.


6
Точно так же, как другие знают, это покажет только файлы, которые были изменены, но еще не были подготовлены.
— Джерри

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

9
Для меня git ls-files -mничего не показывает, но git status | grep modifiedработает.
— Сандипан Натх

1
Как уже отмечали другие, это показывает только неподготовленные файлы. Если вы хотите показать как неразмеченные, так и промежуточные файлы, это лучший ответ, который я видел: stackoverflow.com/a/39994894/452587
— thdoan

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

58

Похоже git status -uno, покажет вам только файлы, которые отслеживает git, не показывая ничего в каталоге. Не совсем то, что вы просили, но, возможно, выполняет то же самое (получение списка файлов с читаемой длиной, которые отслеживает 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. Это простой и элегантный UI-клиент, который покажет вам измененные файлы и предоставит вам отчет об изменениях, которые вы сделали.

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


1
Не могли бы вы представить, как это относится к моему ответу, учитывая, что я не знаком с этой мерзавцем. например, скриншоты или более подробно?
— chrisjlee

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

Как изменить язык интерфейса колы?
— Цзыюан


0

Для просмотра всех измененных файлов используйте:

git show --stat --oneline HEAD

0

Все отличные ответы; просто FEI, "git checkout" (переключение в ту же ветку или в той же ветке), по-видимому, показывает только измененные файлы.


0

ОС: Windows

Следующая команда отобразит все строки, содержащие слова «updated:» , «renamed:» или «new file:».

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.