2009-11-29 2 views
22

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

git commit -m "my changes" 

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

Я попытался

git ls-files -md 

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

Я ищу тот же результат вы получите от

svn status -q 

Например $ Svn статус -q
file.py
M реж/database.py
M старт .py

ответ

4

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

git diff --name-status 

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

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

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

+2

Неправильное использование. Вопрос в том, «что будет совершено, когда я скажу« git commit -m message ». Это дает различия между деревом работы и кешем, который ближе к тому, что * не будет *. –

26

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

git diff HEAD --name-only 

Поскольку я намеревался сделать

git commit -s -F mesage.txt 

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

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

+2

Разве вы не подразумеваете 'git diff --cached --name-only'? 'diff HEAD' будет показывать файлы, которые были последними, и не были нажаты. в файле '--cached' будут показаны файлы, которые будут выполняться при запуске' git commit' – gcb

+0

'git diff --staged --name-only' также работает. В зависимости от того, как вы думаете о git, вы можете использовать --staged [синоним] (https://stackoverflow.com/a/39877896) вместо --cached. – SpeedCoder5

8

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

git diff --cached --name-status 
3

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

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 в передней части каждого имени файла.

+0

+1. Я согласен, что 'git status --porcelain' можно использовать в скрипте. Я документировал так много в http://stackoverflow.com/a/6978402/6309, сказав, что «Новая опция \ [' --porcelain' \] делает собственный выходной формат команды испускать вывод, который легче обрабатывать Фарфор." – VonC

+0

Это, похоже, не перечисляет фактические файлы, которые были бы нажаты во время нажатия git (и которые были поставлены git add/commmit) – Paul

Смежные вопросы