Индекс не просто список файлов, он на самом деле содержит копии файлов. Эта вещь - этот индекс, или промежуточная область, или кэш - содержит копию каждого файла, за исключением любых файлов, которые вы специально хотите, чтобы отсутствовал в коммите. Эта вещь настолько важна, что у нее есть эти три имени. (Или, может быть, первое имя, использованное для него, было настолько плохим, что у него появилось несколько дополнительных имен. В любом случае у него теперь есть эти три имени.)
Git хранит коммиты как снимки. Каждый коммит имеет копию всех ваших файлов - всех файлов, которые были в индексе, то есть на момент запуска git commit
. Они хранятся в специальном, замороженном / только для чтения, сжатом формате Git-only. Это хорошо для архивов, но бесполезно для выполнения работы. Помните это для следующих нескольких битов.
Когда вы говорите Git git checkout master
, вы говорите Git: Найдите коммит, обозначенный именем master
. Скопируйте эти файлы в свой индекс, затем скопируйте их из своего индекса в мое рабочее дерево, чтобы я мог видеть файлы и работать с ними. В вашем рабочем дереве файлы нормальные. Вы можете использовать их. Ваш компьютер может использовать их. Вы можете изменить их, переименовать, удалить, что хотите.
Когда вы говорите Git git add <em>somefile</em>
, вы говорите Git: Скопируйте файл somefile
из моего рабочего дерева, где я могу его увидеть и обработать, в ваш индекс, чтобы он был готов к перейдите к следующему коммиту. Копия, которая находится в индексе, находится в специальном формате Git-only, но - пока вы не подтвердите его в любом случае - это не заморожено . Это просто готово заморозить .
Когда вы говорите Git git rm <em>somefile</em>
, вы говорите Git: Удалите файл somefile
из моего индекса и из моего рабочего дерева. Если вы используете --cached
, как в git rm --cached <em>somefile</em>
, вы говорите Git удалить его из индекса, но оставить его в рабочем дереве в покое.
Когда вы говорите Git git commit
, вы говорите Git: Возьмите все файлы, которые есть в индексе, прямо сейчас. Заморозьте их в новый коммит. Что бы ни было в индексе , затем , это то, что находится в вашем новом коммите. Что бы не было в индексе, это не в вашем новом коммите. Итак, ваш новый коммит - это снимок. Индекс содержит предложенный следующий снимок . Вы можете изменить его так, как вам угодно, в любое время: git add
копирует в него файлы, заменяя старый или создавая новый, в зависимости от того, было ли там ранее это имя. Расположите - или «stage», отсюда и название «staging area» - файлы по своему усмотрению, затем используйте git commit
, чтобы заморозить их в моментальный снимок.