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.51.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
СИНОПСИС
git
rm
[-f
|--force
] [-n
] [-r
] [--cached
] [--ignore-unmatch
] [--quiet
] [--pathspec-from-file=
<file> [--pathspec-file-nul
]] [--
] [<pathspec>…]
ОПИС
Видаліть файли, що відповідають специфікації шляхів (pathspec), з індексу або з робочого дерева та індексу. git
rm
не видалятиме файл лише з вашого робочого каталогу. (Немає можливості видалити файл лише з робочого дерева, але зберегти його в індексі; використовуйте /bin/rm
, якщо хочете це зробити.) Файли, що видаляються, мають бути ідентичними кінчику гілки, і жодні оновлення їхнього вмісту не можуть бути поміщені в індекс, хоча цю поведінку за замовчуванням можна змінити за допомогою опції -f
. Коли вказано --cached
, поміщений вміст має відповідати або кінчику гілки, або файлу на диску, що дозволяє видалити файл лише з індексу. Коли використовуються розріджені перевірки (див. git-sparse-checkout[1]), git
rm
видалятиме лише шляхи в межах шаблонів розріджених перевірок.
ОПЦІЇ
- <pathspec>...
-
Файли для видалення. Можна вказати початкову назву каталогу (наприклад,
dir
для видаленняdir/file1
таdir/file2
) для видалення всіх файлів у каталозі та рекурсивно всіх підкаталогів, але для цього потрібно явно вказати опцію-r
.Команда видаляє лише ті шляхи, які відомі Git.
Зміщення файлів у глобалізації збігається з межами каталогів. Таким чином, враховуючи два каталоги
d
таd2
, існує різниця між використаннямgit
rm
d*'
таgit
rm
d/*'
, оскільки перше також видалить весь каталогd2
.Для отримання додаткової інформації див. запис <pathspec> у gitglossary[7].
-
-f
-
--force
-
Скасувати перевірку актуальності.
-
-n
-
--dry-run
-
Насправді не видаляйте жодних файлів. Натомість просто покажіть, чи існують вони в індексі та чи були б видалені командою.
-
-r
-
Дозволити рекурсивне видалення, якщо вказано назву початкового каталогу.
-
--
-
Цей параметр можна використовувати для відокремлення параметрів командного рядка від списку файлів (корисно, коли імена файлів можуть бути сплутані з параметрами командного рядка).
-
--cached
-
Використовуйте цю опцію, щоб видалити лише шляхи з індексу. Робочі файли дерев, змінені чи ні, залишаться без змін.
-
--ignore-unmatch
-
Вихід з нульовим статусом, навіть якщо не знайдено жодних збігів у файлах.
-
--sparse
-
Дозволити оновлення записів індексу поза межами конуса розрідженого контролю. Зазвичай,
git
rm
відмовляється оновлювати записи індексу, шляхи яких не вписуються в конус розрідженого контролю. Див. git-sparse-checkout[1] для отримання додаткової інформації. -
-q
-
--quiet
-
git
rm
зазвичай виводить один рядок (у формі командиrm
) для кожного видаленого файлу. Ця опція пригнічує цей вивід. -
--pathspec-from-file=
<файл> -
Специфікація шляху передається у <файл> замість аргументів. Якщо <файл> дорівнює саме
-
, то використовується стандартний ввід. Елементи Pathspec розділяються символами LF або CR/LF. Елементи Pathspec можна брати в лапки, як пояснено для змінної конфігураціїcore.quotePath
(див. git-config[1]). Див. також--pathspec-file-nul
та глобальну змінну--literal-pathspecs
. -
--pathspec-file-nul
-
Має сенс лише з
--pathspec-from-file
. Елементи Pathspec розділяються символом NUL, а всі інші символи (включно з символами нового рядка та лапками) сприймаються буквально.
ВИДАЛЕННЯ ФАЙЛІВ, ЯКІ ЗНИКЛИ З ФАЙЛОВОЇ СИСТЕМИ
Команда git
rm
не має можливості видаляти з індексу лише ті шляхи, які зникли з файлової системи. Однак, залежно від випадку використання, існує кілька способів зробити це.
Використання “git commit -a”
Якщо ви маєте намір, щоб ваш наступний коміт записував усі модифікації відстежуваних файлів у робочому дереві та записував усі видалення файлів, які були видалені з робочого дерева за допомогою rm
(на відміну від git
rm
), використовуйте git
commit
-a
, оскільки він автоматично помітить та запише всі видалення. Ви також можете досягти подібного ефекту без коміту, використовуючи git
add
-u
.
Використання “git add -A”
Під час прийняття нового додавання коду для гілки постачальника, ймовірно, ви захочете записати як видалення шляхів, так і додавання нових шляхів, а також зміни існуючих шляхів.
Зазвичай спочатку потрібно видалити всі відстежувані файли з робочого дерева за допомогою цієї команди:
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
переміщує директорію submodules git до директорії superprojects git, щоб захистити історію підмодуля. Якщо вона існує, розділ submodule.
<name> у файлі gitmodules[5] також буде видалено, і цей файл буде поміщено в проміжок (якщо не використовується --cached
або -n
).
Підмодуль вважається оновленим, коли HEAD
такий самий, як записаний в індексі, жодні відстежувані файли не змінені, а в робочому дереві підмодуля немає невідстежуваних файлів, які не ігноруються. Ігноровані файли вважаються такими, що можна використовувати, і це не запобігає видаленню робочого дерева підмодуля.
Якщо ви хочете лише видалити локальне отримання підмодуля з вашого робочого дерева без фіксації видалення, використовуйте замість цього git-submodule[1] deinit
. Також дивіться gitsubmodules[7] для отримання детальної інформації про видалення підмодулів.
ПРИКЛАДИ
- git rm Documentation/\*.txt
-
Видаляє всі файли
*.txt
з індексу, що знаходяться в каталозіDocumentation
та будь-яких його підкаталогах.Зверніть увагу, що зірочку
*
у цьому прикладі взято в лапки з боку оболонки; це дозволяє Git, а не оболонці, розширювати шляхи до файлів та підкаталогів у каталозіDocumentation/
. -
git
rm
-f
git-*.sh
-
Оскільки цей приклад дозволяє командній оболонці розгорнути зірочку (тобто ви явно перераховуєте файли), він не видаляє
subdir/git-foo.sh
.
ПОМИЛКИ
Щоразу, коли оновлення суперпроекту видаляє заповнений підмодуль (наприклад, під час перемикання між комітами до та після видалення), застаріле отримання підмодуля залишатиметься у старому місці. Видалення старого каталогу безпечне лише тоді, коли використовується git-файл, оскільки в іншому випадку історія підмодуля також буде видалена. Цей крок буде застарілим після реалізації рекурсивного оновлення підмодуля.
GIT
Частина набору git[1]