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

173

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

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

chrisjlee
источник
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).

TomNysetvold
источник
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
29
git status -s | awk '{if ($1 == "M") print $2}'
Карл Бэкстрем
источник
3
Илиawk '$1 == "M" { print $2 }'
Кальпау
29

Для измененных файлов:

git status | grep modified:
копье
источник
1
Настолько полезно, что я создал псевдоним для этого:git config --global alias.modified '!git status | grep modified:'
Ричард Парнаби-Кинг
15

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

ZeroGraviti
источник
2
Я рекомендую эти фильтры: git diff --cached --name-only --diff-filter=ACMRкоторые добавляют, копируют, изменяют и переименовывают файлы.
qwertzguy
7

git diff --name-only тоже работает

mpelzsherman
источник
3

Я искал ту же информацию и нашел следующие дает измененные файлы:

git status -uno
Tectrendz
источник
2
git status -uno --porcelainдобавляет хороший вывод для скрипта синтаксического анализа
pprzemek
3

Ты можешь использовать

$ git status -uno 

перечислить только измененные файлы.

Картик
источник
3

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

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

Вы можете указать путь, чтобы git statusограничить вывод определенной папкой в ​​репо.

Например:

git status app
git status spec
git status src/components
BillFienberg
источник
2

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

git ls-files -m

Если вам нужно только базовое имя (без пути), тогда вы можете передать каждый результат в команду basename, используя xargs, строка за строкой:

git ls-files -m | xargs -L 1 basename
briggySmalls
источник
1

Я использую эту команду:

$ git status -uno -sb

И вывод выглядит так:

## master...origin/master
 M GNUmakefile
 M include/mp4v2/project.h
SebMa
источник
0

Я использую git cola. Это простой и элегантный UI-клиент, который покажет вам измененные файлы и предоставит вам отчет об изменениях, которые вы сделали.

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

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

Если вы хотите перечислить измененные файлы, вы можете сделать это:

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

Дэвид Эрнандес
источник
0

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

git show --stat --oneline HEAD
Fayaz
источник
0

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

user1172173
источник
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:

Carson
источник