Например, файл может быть в трех местах: дерево, индекс и рабочая копия. Когда вы просто добавляете файл в папку, вы добавляете его в рабочую копию.
Когда вы делаете что-то подобное, 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
git reset --mixed
. Я был немного смущен утверждением, котороеgit rm --cached
является противоположностьюgit add
. В буквальном смысле это неверно и может привести к повреждению. В моем случае я использовалgit add
для добавления измененного файла в промежуточную область и хотел, чтобы противоположное «добавлению» не было начальным добавлением файла. + Ответ Грега Хьюгилла помог мне получить более четкую картину.git rm --cached
«полная противоположностьgit add file
» вводит в заблуждение.git reset file
ближе к тому, чтобы быть противоположностьюgit add file
.Возможно, пример поможет:
против
Обратите внимание , что если вы ничего не изменилось еще , то второе обязательство не будет на самом деле ничего делать.
источник
--
используется для отделения параметров команды от имен файлов. Если бы были и ветка, и файл с именемasd
, то этоgit reset HEAD asd
было бы неоднозначно.--
Говорит «все следующее это имя файла».git reset HEAD <file>
точно так же, какgit rm --cached <file>
и тогдаgit add --intent-to-add <file>
?git rm --cached file
будет удалить файл со сцены. То есть при фиксации файл будет удален.git reset HEAD -- file
просто сбросит файл в промежуточной области в состояние, в котором он находился в коммите HEAD, т.е. отменит все изменения, которые вы внесли в него со времени последнего коммита. Если это изменение происходит при добавлении файла заново, то они будут эквивалентны.источник
git rm --cached file
является своего рода противоположностьюgit add
, этот ответ имел для меня большой смысл и был довольно кратким. Почти такой же короткий, как этот комментарий;)git rm --cached file
это не противоположностьgit add file
. Поведение оказывается противоположнымgit add file
в конкретном случае, когда вы добавили новый, ранее не отслеживаемый файл. В любом другом случае противоположностьюgit add file
являетсяgit reset HEAD file
.git reset HEAD file
также изменяетgit add file
в первом случае (добавление неотслеживаемого файла) и в каждом случае, именно поэтому git предлагает сделать, если вы хотите отменить добавление git.