Поскольку ваш проект со временем меняется, в какой-то момент вам, вероятно, придется удалить файл или весь каталог из репозитория. Поскольку это включает больше, чем изменение содержимого файла, в 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