Education 1.1 Help

Индекс

Индекс в Git представляет собой специальную промежуточную зону, где хранятся изменения файлов на пути от рабочей директории до репозитория. При выполнении коммита в репозиторий попадают только те изменения, которые были добавлены в индекс. В данном уроке вы узнаете, зачем нужен индекс и как он функционирует.

Использование индекса в Git имеет смысл по нескольким причинам. Даже работая над одной задачей, разработчик часто встречает разные аспекты кода:

  • Ошибки

  • Неправильное оформление кода

  • Фрагменты, требующие адаптации под новые требования

В большинстве случаев вполне нормально исправлять эти недочеты прямо в процессе работы. В результате в рабочей директории накапливается множество разнообразных изменений. Часть из них относится к основной задаче, а часть представляет собой различные исправления, которые не связаны напрямую с основной задачей. В чем заключается здесь проблема?

Представим, что мы сделали всего один коммит, в который включили как основную задачу, так и дополнительные исправления. Это приводит к нескольким неприятным последствиям.

Во-первых, усложняется просмотр истории коммитов. Коммит начинает содержать абсолютно разноплановые изменения, что может отвлекать при проверке кода другими разработчиками:

# Обычно в таких коммитах встречается условие И в описании # Это показатель того, что в рамках одного коммита сделано несколько изменений git commit -m 'add new feature and fix something'

Во-вторых, при откате коммита по любой причине отменятся изменения, которые, тем не менее, все равно требуется сохранить.

Именно здесь индекс оказывает помощь. Наличие индекса позволяет нам уверенно формировать коммиты без опасений.

Стандартная практика работы с индексом заключается в добавлении или изменении файлов, а затем выполнении коммита:

git add somefile git commit -m 'add somefile'

Если речь идет про один-два файла, которые нужно закоммитить прямо сейчас, то можно сделать проще. Этот подход работает только с уже отслеживаемыми файлами:

echo 'new data' >> INFO.md # Не нужно явно вызывать команду `git add` git commit INFO.md -m 'update INFO.md'

Иногда бывает наоборот — мы исправили много файлов и хотим добавить их в коммит сразу все. Тогда поможет точка:

# Добавляет абсолютно все изменения рабочей директории в индекс git add .

Команда выше очень опасна. С ее помощью крайне легко закоммитить много лишнего, особенно если перед коммитом не посмотреть git diff --staged.

Ну и совсем страшная, но полезная команда — это коммит с одновременным добавлением всего в индекс:

# Флаг -a автоматически добавляет все изменения рабочей директории в индекс git commit -am 'do something'

С другой стороны, нередко разные изменения делаются в одних и тех же файлах. То есть изменения в этих файлах по-хорошему должны находиться в разных коммитах.

И даже такое можно сделать с помощью Git. Для этого подходит команда git add -i, которая показывает измененные куски файлов и спрашивает, что с ними сделать:

asciinema

С помощью этой команды можно очень точно выбрать то, что должно попасть в коммит, а что нет. Ее использование обычно показывает хороший уровень владения Git.

Самостоятельная работа

Попрактикуйтесь в использовании команд из урока, меняя содержимое репозитория.

Дополнительные материалы

  1. Интерактивное индексирование

Last modified: 12 June 2024