Например, файл может быть в трех местах: дерево, индекс и рабочая копия. Когда вы просто добавляете файл в папку, вы добавляете его в рабочую копию.
Когда вы делаете что-то подобное, 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 --cached
git diff
git diff --cached
git status
Untracked