Git: удалить файл

Поскольку ваш проект со временем меняется, в какой-то момент вам, вероятно, придется удалить файл или весь каталог из репозитория. Поскольку это включает больше, чем изменение содержимого файла, в Git есть специальная команда для обработки удаления файлов, которая также принимает некоторые важные флаги в зависимости от вашего варианта использования. В этой короткой статье мы рассмотрим команду git rm и то, как ее использовать для удаления файлов и каталогов из вашего репозитория. Удаление файла Простейшее использование этой команды

Поскольку ваш проект со временем меняется, в какой-то момент вам, вероятно, придется удалить файл или весь каталог из репозитория. Поскольку это включает больше, чем изменение содержимого файла, в Git есть специальная команда для обработки удаления файлов, которая также принимает некоторые важные флаги в зависимости от вашего варианта использования.

В этой короткой статье мы рассмотрим команду git rm и то, как ее использовать для удаления файлов и каталогов из вашего репозитория.

Удаление файла

Самым простым способом использования этой команды является удаление одного файла из репозитория, что можно сделать, используя следующий синтаксис:

 $ git rm <filename> 

Допустим, у нас есть репозиторий Git со следующим содержимым:

 $ git ls-files 
 .gitignore 
 index.js 
 lib/api.js 
 lib/db.js 
 package.json 

По какой-то причине предположим, что нам больше не нужен файл lib/db.js Чтобы удалить его из нашего репо, мы запустим следующее:

 $ git rm lib/db.js 
 rm 'lib/db.js' 

Теперь, когда список наших файлов репо снова показывает, что он был удален:

 $ git ls-files 
 .gitignore 
 index.js 
 lib/api.js 
 package.json 

Однако мы еще не закончили. Если вы запустите команду status , вы заметите, что удаление файла все еще находится на стадии подготовки и его необходимо зафиксировать в репозитории, как и любое другое изменение, которое вы вносите.

 $ git status 
 On branch master 
 Changes to be committed: 
 (use "git reset HEAD <file>..." to unstage) 
 
 deleted: lib/db.js 
 $ git commit -m "Removed db.js file" 
 [master cf191e4] Removed db.js file 
 1 file changed, 0 insertions(+), 0 deletions(-) 
 delete mode 100644 lib/db.js 

Удаление нескольких файлов

Удаление нескольких файлов из репо очень похоже на предыдущий вариант использования удаления одного файла. В зависимости от вашего предпочтительного метода это можно сделать несколькими способами. Например, вы можете просто явно указать все файлы, которые нужно удалить:

 $ git rm lib/db.js lib/api.js 
 rm 'lib/api.js' 
 rm 'lib/db.js' 

Или, если файлов больше, чем вы хотите перечислить, вы всегда можете использовать подстановочный знак:

 $ git rm lib/*.js 
 rm 'lib/api.js' 
 rm 'lib/db.js' 

Обратите внимание, что, удалив все содержимое из lib , Git также удалит сам каталог. Это сделано потому, что Git отслеживает только файлы, а не каталоги:

 $ git ls-files 
 .gitignore 
 index.js 
 package.json 

Удаление каталога

Чтобы удалить весь каталог из репозитория Git, все, что вам нужно сделать, это удалить все файлы в этом каталоге из репозитория. Это можно сделать одним из способов, описанных выше, если файлов немного, но во многих случаях это может стать слишком громоздким. В этом случае лучшим вариантом будет рекурсивное удаление всех файлов с помощью флага -r

 $ git rm -r <directory> 

В этом примере мы откажемся от приведенного выше примера и добавим еще несколько файлов в наш каталог lib

 $ git ls-files 
 .gitignore 
 index.js 
 lib/apis/aws.js 
 lib/apis/github.js 
 lib/apis/stripe.js 
 lib/db.js 
 package.json 

Здесь у нас есть вложенные файлы и каталоги в lib . Чтобы полностью удалить весь lib из репозитория, мы можем использовать флаг -r

 $ git rm -r lib 
 rm 'lib/apis/aws.js' 
 rm 'lib/apis/github.js' 
 rm 'lib/apis/stripe.js' 
 rm 'lib/db.js' 

Обратите внимание, что это обрабатывает удаление всех файлов в lib и даже lib/apis , поскольку он рекурсивно выполняет поиск в каталоге.

И, наконец, не забудьте зафиксировать свои изменения:

 $ git status 
 On branch master 
 Changes to be committed: 
 (use "git reset HEAD <file>..." to unstage) 
 
 deleted: lib/apis/aws.js 
 deleted: lib/apis/github.js 
 deleted: lib/apis/stripe.js 
 deleted: lib/db.js 
 
 $ git commit -am "Removed lib directory" 
 [master 53fc6af] Removed lib directory 
 4 files changed, 0 insertions(+), 0 deletions(-) 
 delete mode 100644 lib/apis/aws.js 
 delete mode 100644 lib/apis/github.js 
 delete mode 100644 lib/apis/stripe.js 
 delete mode 100644 lib/db.js 
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus