"ГИТ РМ --кэшированные х" против "ГИТ сброс головка - х"?
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 ответа:
есть три места, где файл, скажем, может быть - дерево, индекс и рабочая копия. Когда вы просто добавляете файл в папку, вы добавляете его в рабочую копию.
когда вы делаете что-то вроде
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просто сбросит файл в промежуточной области в состояние, в котором он был на главной фиксации, т. е. отменит любые изменения, которые вы сделали с ним с момента последнего фиксации. Если это изменение происходит с новым добавлением файла, то они будут эквивалентны.