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