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.53.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=<file> [--pathspec-file-nul]] [--] [<pathspec>…]
ОПИС
Використовується для видалення файлів, що відповідають специфікатору шляху (pathspec), з індексу або з робочого дерева та індексу. git rm видаляє файл не лише з вашої робочої теки. (Немає можливості видалити файл лише з робочого дерева, але зберегти його в індексі; використовуйте /bin/rm, якщо хочете це зробити.) Файли, що видаляються, мають бути ідентичними вершині гілки, і жодні оновлення їхнього вмісту не можуть бути поміщені в індекс, хоча цю типову поведінку можна змінити за допомогою опції -f. Коли вказано --cached, вміст в stage має відповідати або вершині гілки, або файлу на диску, що дозволяє видалити файл лише з індексу. Коли використовуються розріджені перевірки (див. git-sparse-checkout[1]), git rm видалятиме лише шляхи в межах шаблонів розріджених перевірок.
ОПЦІЇ
- <pathspec>...
-
Файли для видалення. Можна вказати назву теки (наприклад,
dirдля видаленняdir/file1таdir/file2) для видалення всіх файлів у теці та рекурсивно всіх підтеках, але для цього потрібно явно вказати опцію-r.Команда видаляє лише ті шляхи, які відомі Git.
Використання символів підстановки діє й за межами теки. Таким чином, враховуючи те що нас є дві теки
dтаd2, є різниця між використаннямgitrmd*'таgitrmd/*', оскільки перше також видалить всю текуd2.Для отримання додаткової інформації див. опис <pathspec> у gitglossary[7].
-
-f -
--force -
Перевизначає перевірки актуальності.
-
-n -
--dry-run -
Насправді не видаляє жодних файлів. Натомість просто показує, чи існують вони в індексі та чи були б видалені командою
gitrm. -
-r -
Дозволяє рекурсивне видалення, якщо вказано назву теки.
-
-- -
Цей параметр можна використовувати для відокремлення параметрів командного рядка від списку файлів (корисно, коли імена файлів можуть бути сплутані з параметрами командного рядка).
-
--cached -
Використовуйте цю опцію, щоб видалити лише шляхи з індексу. Файли в робочому дереві, змінені чи ні, залишаться без змін.
-
--ignore-unmatch -
Завершує роботу з нульовим статусом, навіть якщо не знайдено жодного файлу.
-
--sparse -
Дозволяє оновлення записів індексу поза межами конуса розрідженого контролю. Зазвичай,
gitrmвідмовляється оновлювати записи індексу, шляхи яких не вписуються в конус розрідженого контролю. Див. 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. Елементи 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] також буде видалено, і цей файл буде поміщено в stage (якщо не використовується --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]