git rm file.txt
видаляє файл з репо, але також видаляє його з локальної файлової системи .
Щоб вилучити файл з репо і не видалити його з локальної файлової системи, використовуйте:
git rm --cached file.txt
Нижче точна ситуація - це те, коли я використовую git для підтримки контролю версій для веб-сайту мого бізнесу, але каталог «mickey» був папкою tmp для обміну приватним вмістом з розробником CAD. Коли йому були потрібні ВЕЛИЧЕЗНІ файли, я зробив приватний, від’єднаний каталог і 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" в Інтернеті і мені дуже допомагає.
git rm
є правильною відповіддю, але пам’ятайте, що файл все ще буде в історії. Якщо ви хочете видалити файл, оскільки він мав конфіденційну інформацію, вам потрібно зробити щось більш різке. (Зміна історії, особливо для вмісту, який ви вже натиснули, - це кардинальне дійство, і його слід уникати, якщо можливо.)