Не совсем так. По крайней мере, не для рабочего каталога.
Честно говоря, мне понадобилось несколько минут, чтобы понять, что может означать ваш вопрос. Вы спрашиваете, будет ли рабочий каталог совпадать с извлеченным коммитом после запуска команды, которая, как вы знаете, устанавливает рабочий каталог в соответствие с извлеченным коммитом, поэтому вопрос ... немного мутный.
Но есть ARE ситуаций, в которых рабочий каталог окажется не таким, как в извлеченном коммите. Например, игнорируемые (или не отслеживаемые) файлы, как правило, не будут повреждены. В некоторых случаях это невозможно; возможно у меня есть неотслеживаемый файл с именем foo
, но целевое дерево имеет файл с именем foo
по тому же пути. Различные команды обрабатывают это по-разному. (И здесь важно отметить, что checkout commit
- это ОЧЕНЬ команда, отличная от checkout commit -- path
.) Некоторые команды будут загромождать ваши локальные непроверенные данные (которые затем будут невосстановимыми, по крайней мере, насколько это возможно *) 1019 * механизм), в то время как другие будут прерывать и предупреждать вас, что локальные изменения будут перезаписаны.
Таким образом, не совсем правильно говорить, что рабочее дерево "перестроено" из целевого дерева - в этом каталог не полностью rm
'd, а затем воссоздается из данных дерева. Скорее, файлы добавляются, удаляются или заменяются по мере необходимости (что в любом случае является более эффективной процедурой).
Для индекса: труднее показать любой «признак» индекса, который не был полностью перестроен, поскольку нет аналогичной концепции для неотслеживаемых файлов в индексе. Я ожидал бы, что git использует все хеши, которые он хранит для всего, так что он снова просто изменит то, что нужно изменить, вместо полной перестройки; но я не уверен на 100% в этом случае, и это деталь реализации, которая на самом деле не имеет значения. Если вы скажете git, что индекс будет соответствовать фиксации, индекс будет соответствовать фиксации.