Как правильно коммитить файлы, целый каталог, чтобы не коммитились все за раз

К примеру я сделал git add . после чего все файлы добавились, и как мне теперь сделать коммиты для определенных файлов? Я хочу, чтобы были коммиты только для определенный файлов, а для остальных коммит но пустой. Так получилось, что я запушил все файлы одним коммитом. И теперь все файлы под коммитом "Fix slide-menu".


Ответы (1 шт):

Автор решения: aleksandr barakin

чтобы не повторяться о том, что же такое индекс:

теперь собственно вопрос:

как правильно коммитить файлы …, чтобы не коммитились все за раз?

команда commit (без опции -a, конечно) формирует коммит из содержимого индекса (staging area). а в индекс файлы (новые либо изменённые) добавляются при помощи команды add.

отсюда логически следует:

  • что добавили в индекс, то в коммит и попадёт.
  • чтобы в коммит не попало «всё подряд», надо и добавлять выборочно.

можно указать конкретный файл, или целый каталог (добавлен будет, естественно, не каталог, а содержащиеся в нём файлы, рекурсивно). отдельными командами add или целой пачкой. примеры:

$ git add файл
$ git add путь/к/файлу
$ git add каталог/с/файлами
$ git add файл1 путь/к/файлу2 каталог/с/файлами ...

не бойтесь продублировать команды — файл добавится только один раз, сколько бы раз вы его не упомянули в командах add.

можно использовать шаблоны оболочки: * — вместо любого количества символов, ? — вместо одного символа. текущий каталог, как обычно, можно указать точкой: .

посмотреть, какие файлы добавлены в индекс, можно, например, командой status:

$ git status

правда, эта команда показывает и другую информацию (бывает, много), и чтобы видеть только добавленные в индекс файлы, можно использовать:

$ git diff --name-only --cached

убрать файл из индекса можно командой rm с опцией --cached. указать можно и один файл, и много файлов. можно указать и каталог, чтобы исключить файлы рекурсивно. тогда надо будет добавить ещё и опцию -r:

$ git rm --cached файл
$ git rm --cached путь/к/файлу
$ git rm --cached -r каталог/с/файлами
$ git rm --cached -r файл1 путь/к/файлу2 каталог/с/файлами ...

как и в случае с командой add, можно использовать шаблоны оболочки.

→ Ссылка