Например, файл может быть в трех местах: дерево, индекс и рабочая копия. Когда вы просто добавляете файл в папку, вы добавляете его в рабочую копию.
Когда вы делаете что-то подобное, git add fileвы добавляете это в индекс. И когда вы делаете это, вы также добавляете это в дерево.
Это, вероятно, поможет вам узнать еще три распространенных флага в git reset:
git reset [- <mode>] [ <commit>]
Эта форма сбрасывает текущий заголовок ветви <commit>и, возможно, обновляет индекс (сбрасывая его на дерево <commit>) и рабочее дерево в зависимости от того <mode>, что должно быть одним из следующих:
--soft
Не затрагивает ни индексный файл, ни рабочее дерево (но сбрасывает голову <commit>, как во всех режимах). Это оставляет все ваши измененные файлы «Изменениями, которые нужно зафиксировать», как это будет указано в git status.
--mixed
Сбрасывает индекс, но не рабочее дерево (т. Е. Измененные файлы сохраняются, но не помечаются для фиксации) и сообщает, что не было обновлено. Это действие по умолчанию.
--жесткий
Сбрасывает индекс и рабочее дерево. Любые изменения отслеживаемых файлов в рабочем дереве, так <commit>как отбрасываются.
Теперь, когда вы делаете что-то вроде: git reset HEADто, что вы на самом деле делаете, git reset HEAD --mixedэто «сбрасывает» индекс в состояние, в котором он находился до того, как вы начали добавлять файлы / добавлять модификации в индекс (через git add). В этом случае рабочая копия и Индекс (или подготовка) были синхронизированы, но вы сделали заголовок и индекс синхронизированными после сброса.
git rmс другой стороны, удаляет файл из рабочего каталога и индекса, а когда вы фиксируете файл, он также удаляется из дерева. git rm --cachedоднако удаляет файл только из индекса и сохраняет его в вашей рабочей копии. Это полная противоположность. git add file В этом случае вы сделали индекс отличным от HEAD и рабочего, в котором HEAD имеет ранее зафиксированную версию файла, рабочая копия имела последнее изменение, если таковое имеется, или содержимое из HEAD файл, и вы удалили файл из индекса. Коммит сейчас синхронизирует индекс и дерево, и файл будет удален.
git rm --cachedgit diffgit diff --cachedgit statusUntracked