Индекс
Индекс в Git представляет собой специальную промежуточную зону, где хранятся изменения файлов на пути от рабочей директории до репозитория. При выполнении коммита в репозиторий попадают только те изменения, которые были добавлены в индекс. В данном уроке вы узнаете, зачем нужен индекс и как он функционирует.
Использование индекса в Git имеет смысл по нескольким причинам. Даже работая над одной задачей, разработчик часто встречает разные аспекты кода:
Ошибки
Неправильное оформление кода
Фрагменты, требующие адаптации под новые требования
В большинстве случаев вполне нормально исправлять эти недочеты прямо в процессе работы. В результате в рабочей директории накапливается множество разнообразных изменений. Часть из них относится к основной задаче, а часть представляет собой различные исправления, которые не связаны напрямую с основной задачей. В чем заключается здесь проблема?
Представим, что мы сделали всего один коммит, в который включили как основную задачу, так и дополнительные исправления. Это приводит к нескольким неприятным последствиям.
Во-первых, усложняется просмотр истории коммитов. Коммит начинает содержать абсолютно разноплановые изменения, что может отвлекать при проверке кода другими разработчиками:
Во-вторых, при откате коммита по любой причине отменятся изменения, которые, тем не менее, все равно требуется сохранить.
Именно здесь индекс оказывает помощь. Наличие индекса позволяет нам уверенно формировать коммиты без опасений.
Стандартная практика работы с индексом заключается в добавлении или изменении файлов, а затем выполнении коммита:
Если речь идет про один-два файла, которые нужно закоммитить прямо сейчас, то можно сделать проще. Этот подход работает только с уже отслеживаемыми файлами:
Иногда бывает наоборот — мы исправили много файлов и хотим добавить их в коммит сразу все. Тогда поможет точка:
Команда выше очень опасна. С ее помощью крайне легко закоммитить много лишнего, особенно если перед коммитом не посмотреть git diff --staged
.
Ну и совсем страшная, но полезная команда — это коммит с одновременным добавлением всего в индекс:
С другой стороны, нередко разные изменения делаются в одних и тех же файлах. То есть изменения в этих файлах по-хорошему должны находиться в разных коммитах.
И даже такое можно сделать с помощью Git. Для этого подходит команда git add -i
, которая показывает измененные куски файлов и спрашивает, что с ними сделать:
С помощью этой команды можно очень точно выбрать то, что должно попасть в коммит, а что нет. Ее использование обычно показывает хороший уровень владения Git.
Самостоятельная работа
Попрактикуйтесь в использовании команд из урока, меняя содержимое репозитория.