git rm file.txt
удаляет файл из репозитория, но также удаляет его из локальной файловой системы .
Чтобы удалить файл из репозитория, а , а не , удалить его из локальной файловой системы, используйте:
git rm --cached file.txt
В приведенной ниже точной ситуации я использую git для поддержания контроля версий на веб-сайте моего предприятия, но каталог «mickey» был папкой tmp для обмена частным контентом с разработчиком САПР. Когда он нуждался в ОГРОМНЫХ файлах, я создал личный, несвязанный каталог и установил там ftpd файлы для его загрузки через браузер. Забыв, что я сделал это, я позже выполнил git add -A
из базовой директории сайта. Впоследствии git status
показал новые файлы, требующие фиксации. Теперь мне нужно было удалить их из отслеживания git и контроля версий ...
Ниже приведен пример того, что случилось со мной, когда я случайно удалил файл .003
. К счастью, мне все равно, что случилось с локальной копией в .003
, но некоторые другие в настоящее время измененные файлы были обновлениями, которые я только что сделал для веб-сайта, и будут эпическими, если их удалить в локальной файловой системе! «Локальная файловая система» = живой сайт (не очень хорошая практика, но реальность) .
[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$
[~/www]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: shop/mickey/mtt_flange_SCN.7z.001
# modified: shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002
[~/www]$
[~/www]$
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002
[~/www]$
[~/www]$
[~/www]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: shop/mickey/mtt_flange_SCN.7z.002
# deleted: shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
# modified: shop/mickey/mtt_flange_SCN.7z.001
[~/www]$
Обновление: Этот ответ получает некоторый трафик, поэтому я подумал, что упомяну свой другой ответ Git поделится парой отличных ресурсов: Эта страница есть графика, которая помогает демистифицировать Git для меня. Книга "Pro Git" онлайн и мне очень помогает.