Как мне перечислить только файлы, которые будут зафиксированы? - PullRequest
26 голосов
/ 29 ноября 2009

Можно ли получить список файлов, которые будут зафиксированы, когда я наберу следующее?

git commit -m "my changes"

Слишком много списков состояния git. Я мог бы вычеркнуть все слова, но не хотел бы. И я не хочу, чтобы мне говорили о неотслеживаемых файлах.

Я пробовал

git ls-files -md

, но это не показывает файлы, которые были недавно добавлены, но еще не зафиксированы.

Я ищу тот же вывод, который вы получите от

svn status -q

Например $ svn status -q
Файл.py
M dir / database.py
M start.py

Ответы [ 4 ]

30 голосов
/ 29 ноября 2009

Это то, что я искал. Спасибо notnoop за лидерство, в котором я нуждался. Я хотел опубликовать свое решение на случай, если оно поможет другим.

git diff HEAD  --name-only

Так как я собирался сделать

git commit -s -F mesage.txt

с файлами, найденными в первой строке.

Я собираюсь создать небольшую систему, которая полностью игнорирует индекс, то есть мне никогда не нужно делать git add. (Насколько я понимаю, индекс полезен при создании исправлений, что никоим образом не является нормой в моем рабочем процессе.)

9 голосов
/ 30 ноября 2009

Эта команда сообщит вам, какие файлы в вашем индексе / кэше / промежуточной области отличаются от текущего HEAD (и являются ли они добавлениями, изменениями или удалениями), то есть изменениями, которые будут зафиксированы, если вы используете git commit без пути или опция -a. Его формат в достаточной степени похож на вывод svn status, который вы показываете.

git diff --cached --name-status
5 голосов
/ 29 ноября 2009

Вы можете попробовать:

git diff --name-status

Я получаю следующее:

$ git diff --name-status
M       README.markdown

Без неотслеживаемых файлов.

3 голосов
/ 04 января 2014

Я знаю, что оригинал ОП просили избегать git status, но я чувствовал, что было бы неплохо оставить его для потомков (то есть других людей, которые не разделяют оговорки ОП).

git status --porcelain | grep -v '^[ |??]' | sed -e 's/[A-Z] *//'

Я рассуждаю так: git status --porcelain похоже, что он был построен именно для этого типа затруднений ...

источник: http://git -scm.com / docs / git-status.html

EDIT: Вы можете не использовать sed -e 's/[A-Z] *//', если хотите, чтобы теги изменения git находились перед каждым именем файла.

...