Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.50.1 → 2.54.0 no changes
-
2.50.0
2025-06-16
- 2.43.1 → 2.49.1 no changes
-
2.43.0
2023-11-20
- 2.34.1 → 2.42.4 no changes
-
2.34.0
2021-11-15
- 2.32.1 → 2.33.8 no changes
-
2.32.0
2021-06-06
- 2.26.1 → 2.31.8 no changes
-
2.26.0
2020-03-22
- 2.16.6 → 2.25.5 no changes
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
- 2.1.4 → 2.12.5 no changes
-
2.0.5
2014-12-17
ОБЗОР
gitrm[-f|--force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--pathspec-from-file=<файл> [--pathspec-file-nul]] [--] [<спецификатор-пути>…]
ОПИСАНИЕ
Удалить файлы, соответствующие спецификатору пути, из индекса или из рабочего каталога и индекса. git rm не удалит файл только из вашего рабочего каталога. (Нет опции для удаления файла только из рабочего каталога с сохранением его в индексе; используйте /bin/rm, если хотите это сделать.) Удаляемые файлы должны быть идентичны верхушке (tip) ветки, и никакие обновления их содержимого не могут быть проиндексированы (staged) в индексе, хотя это поведение по умолчанию можно отменить с помощью опции -f. Когда указан --cached, проиндексированное содержимое должно соответствовать либо верхушке ветки, либо файлу на диске, что позволяет удалить файл только из индекса. Когда используется частичное переключение (sparse checkout) (см. git-sparse-checkout[1]), git rm будет удалять только пути, находящиеся в пределах шаблонов частичного переключения.
ПАРАМЕТРЫ
- <спецификатор-пути>…
-
Файлы для удаления. Можно указать ведущее имя каталога (например,
dirдля удаленияdir/file1иdir/file2), чтобы удалить все файлы в каталоге и рекурсивно все подкаталоги, но для этого требуется явно указать опцию-r.Команда удаляет только те пути, которые известны Git.
Подстановка файлов (globbing) работает через границы каталогов. Таким образом, для двух каталогов
dиd2существует разница между использованиемgitrmd*'иgitrmd/*', поскольку первое также удалит весь каталогd2.Для получения более подробной информации см. запись <спецификатор-пути> в gitglossary[7].
-
-f -
--force -
Пропустить проверку актуальности.
-
-n -
--dry-run -
Не удалять файл(ы) на самом деле. Вместо этого просто показать, существуют ли они в индексе и будут ли удалены командой.
-
-r -
Разрешить рекурсивное удаление, когда указано ведущее имя каталога.
-
-- -
Этот параметр — разделитель, который можно использовать для отделения параметров командной строки от списка файлов (полезно, когда имена файлов могут быть ошибочно приняты за параметры командной строки).
-
--cached -
Используйте этот параметр, чтобы снять с индексации (unstage) и удалить пути только из индекса. Файлы рабочего каталога, изменённые или нет, останутся нетронутыми.
-
--ignore-unmatch -
Заврешить работу с нулевым кодом возврата, даже если файлы не найдены.
-
--sparse -
Разрешить обновление объектов индекса за пределами извлечённой области разреженного состояния (sparse-checkout). Обычно
gitrmотказывается обновлять данные индекса, не входящие в область, извлечённую sparse-checkout. См. подробности в git-sparse-checkout[1]. -
-q -
--quiet -
Обычно
gitrmвыводит одну строку (в форме командыrm) для каждого удалённого файла. Этот параметр подавляет этот вывод. -
--pathspec-from-file=<файл> -
Спецификатор пути передаётся в <файле>, а не в аргументах командной строки. Если <файл> точно равен
-, то используется стандартный ввод. Элементы спецификатора пути разделяются символами LF или CR/LF. Элементы спецификатора пути могут заключаться в кавычки, как объяснено для переменной конфигурацииcore.quotePath(см. git-config[1]). См. также--pathspec-file-nulи глобальный--literal-pathspecs. -
--pathspec-file-nul -
Имеет значение только при указании
--pathspec-from-file. Элементы спецификатора пути отделяются друг от друга с помощью NUL-символа, а все остальные символы интерпретируются буквально (включая кавычки и переводы строк).
УДАЛЕНИЕ ФАЙЛОВ, ИСЧЕЗНУВШИХ ИЗ ФАЙЛОВОЙ СИСТЕМЫ
У git rm нет параметра для удаления из индекса только тех путей, которые исчезли из файловой системы. Однако, в зависимости от варианта использования, существует несколько способов сделать это.
Использование “git commit -a”
Если вы намереваетесь, чтобы ваш следующий коммит записывал все изменения отслеживаемых файлов в рабочем каталоге и записывал все удаления файлов, которые были удалены из рабочего каталога с помощью rm (в отличие от git rm), используйте git commit -a, так как он автоматически заметит и запишет все удаления. Вы также можете получить аналогичный эффект без фиксации, используя git add -u.
Использование “git add -A”
При получении нового кода для ветки поставщика (vendor branch) вы, вероятно, захотите записать как удаление путей, так и добавление новых путей, а также изменения существующих путей.
Обычно вы сначала удаляете все отслеживаемые файлы из рабочего каталога с помощью этой команды:
git ls-files -z | xargs -0 rm -f
а затем распаковываете новый код в рабочем каталоге. В качестве альтернативы вы можете использовать rsync для переноса изменений в рабочий каталог.
После этого самый простой способ записать все удаления, добавления и изменения в рабочем каталоге:
git add -A
Смотри git-add[1].
Другие способы
Если всё, что вы действительно хотите сделать, это удалить из индекса файлы, которые больше не присутствуют в рабочем каталоге (возможно, потому что ваш рабочий каталог грязный, и вы не можете использовать git commit -a), используйте следующую команду:
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
ПОДМОДУЛИ
Только подмодули, использующие gitfile (что означает, что они были клонированы с помощью Git версии 1.7.8 или новее), будут удалены из рабочего каталога, поскольку их репозиторий находится внутри каталога .git суперпроекта. Если подмодуль (или один из вложенных в него) по-прежнему использует каталог .git, git rm перемещает каталог git подмодуля в каталог git суперпроекта, чтобы защитить историю подмодуля. Если он существует, раздел submodule.<имя> в файле gitmodules[5] также будет удалён, и этот файл будет проиндексирован (staged) (если не используются --cached или -n).
Подмодуль считается актуальным, когда HEAD совпадает с записанным в индексе, ни один отслеживаемый файл не изменён, и в рабочем каталоге подмодуля нет неотслеживаемых файлов, которые не игнорируются. Игнорируемые файлы считаются несущественными и не препятствуют удалению рабочего каталога подмодуля.
Если вы хотите только удалить локальную рабочую копию подмодуля из вашего рабочего каталога без фиксации удаления, используйте git-submodule[1] deinit. Также подробности об удалении подмодулей см. в gitsubmodules[7].
ПРИМЕРЫ
- git rm Documentation/\*.txt
-
Удаляет из индекса все файлы
*.txt, которые находятся в каталогеDocumentationи любых его подкаталогах.Обратите внимание, что звёздочка
*заключена в кавычки для защиты от оболочки в этом примере; это позволяет Git, а не оболочке, раскрывать имена путей файлов и подкаталогов в каталогеDocumentation/. -
gitrm-fgit-*.sh -
Поскольку в этом примере оболочка раскрывает звёздочку (т.е. вы явно перечисляете файлы), он не удаляет
subdir/git-foo.sh.
ОШИБКИ
Каждый раз, когда обновление суперпроекта удаляет заполненный подмодуль (например, при переключении между коммитами до и после удаления), устаревшая рабочая копия подмодуля остаётся в старом местоположении. Удаление старого каталога безопасно только в том случае, если он использует gitfile, так как в противном случае история подмодуля также будет удалена. Этот шаг устареет, когда будет реализовано рекурсивное обновление подмодулей.
GIT
Является частью пакета git[1]