git rm file.txt
удаляет файл из репозитория, но также удаляет его из локальной файловой системы.
Чтобы удалить файл из репозитория и не удалять его из локальной файловой системы, используйте:
git rm --cached file.txt
В приведенной ниже конкретной ситуации я использую git для управления версиями веб-сайта моей компании, но каталог «mickey» был папкой tmp для обмена личным контентом с разработчиком САПР. Когда ему понадобились ОГРОМНЫЕ файлы, я создал личный, несвязанный каталог и загрузил туда файлы по ftp, чтобы он мог их загрузить через браузер. Забыв об этом, я позже выполнил 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" доступна в Интернете и очень мне помогает.
person
Chris K
schedule
25.05.2013
git rm
- правильный ответ, но помните, что файл все равно останется в истории. Если вы хотите удалить файл, потому что в нем была конфиденциальная информация, вам нужно сделать что-то более радикальное. (Изменение истории, особенно для контента, который вы уже разместили, - это радикальное действие, и его по возможности следует избегать.) - person Keith Thompson   schedule 17.05.2013