«Стадионная зона» - это удобный жаргон для наиболее распространенного и популярного способа использования индекса.Ваш первый вариант,
Создает ли он объект blob и объект дерева, когда мы делаем git add и когда мы делаем git commit, объект commit связан с родительским коммитом и соответствующим объектом дерева, который уже связанк этому объекту blob / tree?
имеет почти точное право: git add
помещает то, что вы добавили в репо, и git commit
связывает объект фиксации с родительским коммитом и соответствующим объектом дерева- - - но этого соответствующего объекта дерева еще нет в репо, git commit
строит дерево (которое связывает имена путей с контентом), консультируясь с индексом, который в точности соответствует его названию: индекс, привязывая пути к контенту,
Итак, git checkout
обновляет индекс так, чтобы он указывал на содержимое, которое он извлекал при каждом извлеченном пути, а git add
обновляет индекс, чтобы он указывал на содержимое, которое он добавил для каждого добавленного пути.
Таким образом, вы можете использовать это как "область подготовки", git commit
заботится только о том, что вы добавили, а не о том, что находится в вашем рабочем дереве.Вот почему git checkout
, git reset
, git commit
и git add
имеют опции --patch
: есть то, что вы извлекли, что вы добавили, и что находится в вашем рабочем дереве.В любой момент может быть полезно увидеть различия между какими-либо из них или «вернуть» часть изменений, которые вы внесли, возможно, потому что они принадлежат другому коммиту или просто нуждаются в дальнейшей работе.