Є три місця, де може бути файл, скажімо, дерево - індекс та робоча копія. Коли ви просто додаєте файл до папки, ви додаєте його до робочої копії.
Коли ви робите щось на кшталт git add file, додаєте це до індексу. І коли ви це зробите, ви також додаєте його до дерева.
Можливо, це допоможе вам дізнатися ще три поширені прапорці в git reset:
git reset [- <mode>] [ <commit>]
Ця форма скидає поточну голову гілки <commit>та, можливо, оновлює індекс ( скидає його на дерево дерева <commit>) та робоче дерево залежно від <mode>, яке повинно бути одним із наступних:
--soft
Не торкається файлу індексу та робочого дерева взагалі (але скидає голову <commit>, як і всі режими). Після цього всі змінені файли залишаються "Змінами, які потрібно здійснити".
- змішаний
Скидає індекс, але не робоче дерево (тобто змінені файли зберігаються, але не позначаються для фіксації) та повідомляє про те, що не було оновлено. Це дію за замовчуванням.
- твердий
Скидає індекс і робоче дерево. Будь-які зміни відслідковуваних файлів у робочому дереві відтоді <commit>відкидаються.
Тепер, коли ви робите щось на кшталт git reset HEADтого, що ви насправді робите, це - git reset HEAD --mixedі він "скине" індекс до стану, який він був до того, як ви почали додавати файли / додавати модифікації до індексу (через git add). У цьому випадку робоча копія та індекс (або інсценізація) синхронізувались, але ви зробили HEAD та індекс синхронізованими після скидання.
git rmз іншого боку, видаляє файл із робочого каталогу та індексу, і коли ви здійснюєте, файл також видаляється з дерева. git rm --cachedоднак видаляє файл лише з індексу та зберігає його у робочій копії. Це якраз протилежне. git add file У цьому випадку ви зробили індекс, який відрізняється від HEAD та робочого, оскільки в ньому HEAD має попередньо скоєну версію файлу, робоча копія мала останню модифікацію, якщо така є або вміст від HEAD of файл, і ви видалили файл з індексу. Комісія зараз синхронізує індекс і дерево, і файл буде видалено.
git rm --cachedgit diffgit diff --cachedgit statusUntracked