"ГИТ РМ --кэшированные х" против "ГИТ сброс головка - х"?


GitRef.org -Базовый:

git rm удалить записи из плацдарм. Это немного другое от git reset HEAD какие " unstages" файлы. Под "unstage" я подразумеваю, что он возвращается плацдарм к тому, что там было прежде чем мы начали изменять вещи. git rm с другой стороны просто кайф файл со сцены полностью, так что он не включен в следующий зафиксируйте снимок, таким образом эффективно удалил его.

By по умолчанию,git rm file удалить файл полностью из промежуточной области, а также с вашего диска > (рабочий каталог). Чтобы оставить файл в рабочем каталоге, можно использовать git rm --cached.

но в чем именно разница между git rm --cached asd и git reset head -- asd?

3 119

3 ответа:

есть три места, где файл, скажем, может быть - дерево, индекс и рабочая копия. Когда вы просто добавляете файл в папку, вы добавляете его в рабочую копию.

когда вы делаете что-то вроде git add file вы добавляете его в индекс. И когда вы совершаете его, вы также добавляете его в дерево.

это, вероятно, поможет вам узнать три более распространенных флага в git reset:

git reset [--<mode>] [<commit>]

эта форма сбрасывает текущую головку ветви в <commit> и, возможно, обновляет индекс (сбрасывая его в дерево <commit>) и рабочее дерево в зависимости от <mode>, который должен быть одним из следующее:
--soft

не касается ни индексного файла, ни рабочего дерева (но сбрасывает голова к <commit>, как и все режимы). Это оставляет все ваши измененные файлы "изменения, которые будут зафиксированы", как поставил бы статус git оно.

-- mixed

сбрасывает индекс, но не рабочее дерево (т. е. измененные файлы сохраняются, но не помечены для фиксации) и сообщает, что не было усовершенствованный. Это действие по умолчанию.

--hard

сброс индекса и рабочего дерева. Любые изменения в отслеживаемых файлах в рабочее дерево с <commit> отбрасываются.

теперь, когда вы делаете что-то вроде git reset HEAD - то, что вы на самом деле делаете, это git reset HEAD --mixed и он" сбросит " индекс в состояние, в котором он был до того, как вы начали добавлять файлы / добавлять изменения в индекс ( через git add)в этом случае рабочая копия и индекс ( или промежуточный ) были синхронизированы, но вы сделали головку и индекс синхронизированными после сброса.

git rm С другой стороны удаляет файл из рабочего каталога и индекса и когда вы фиксируете файл снимается и с дерева тоже. git rm --cached однако удаляет файл только из индекса и сохраняет его в рабочей копии. Это полная противоположность git add fileв этом случае вы сделали индекс отличным от головы и рабочего, в нем, что голова имеет ранее зафиксированную версию файла, рабочая копия имела модификацию las, если таковая имеется или содержимое из головы файла, и вы удалили файл из индекса. Фиксация теперь синхронизирует индекс и дерево, и файл будет удаленный.

возможно, пример поможет:

git rm --cached asd
git commit -m "the file asd is gone from the repository"

и

git reset HEAD -- asd
git commit -m "the file asd remains in the repository"

обратите внимание, что если вы ничего не меняли другое, второй коммит на самом деле не сделает ничего.

git rm --cached file будет удалить файл со сцены. То есть при фиксации файл будет удален. git reset HEAD -- file просто сбросит файл в промежуточной области в состояние, в котором он был на главной фиксации, т. е. отменит любые изменения, которые вы сделали с ним с момента последнего фиксации. Если это изменение происходит с новым добавлением файла, то они будут эквивалентны.