git rm
На початку використання Git часто виникає запитання: «Як змусити Git більше не відстежувати будь-який файл чи кілька файлів?» Щоб видалити файли з репозиторію Git, можна скористатися командою git rm. Її дія протилежна дії git add.
Огляд команди git rm
Команда git rm дозволяє видаляти окремі файли чи групи файлів. Основне призначення git rm — видалення файлів, що відстежуються, з розділу проіндексованих файлів Git. Крім того, за допомогою git rm можна видалити файли одночасно з розділу проіндексованих файлів та робочого каталогу. Видалити з її допомогою файл лише з робочого каталогу не можна. Файли, щодо яких виконується команда, мають бути ідентичні файлам у поточному покажчику HEAD . У разі розбіжностей між версією файлу з вказівника HEAD та версією з розділу проіндексованих файлів або робочого дерева Git заблокує видалення. Таке блокування є механізмом безпеки, який запобігає видаленню змін у процесі їх внесення.
Зверніть увагу, що git rm не видаляє гілки. Докладніше про використання гілок Git див.
Використання
Вказує файли, що підлягають видаленню. Можна вказати один файл, кілька файлів через пропуск ( file1 file2 file3 ) або шаблон підстановки ( ~./directory/* ).
Параметр -f застосовується для відключення перевірки безпеки, за допомогою якої Git забезпечує відповідність файлів у покажчику HEAD поточному вмісту розділу проіндексованих файлів та робочого каталогу.
Пов'язані матеріали
Шпаргалка по Git
СМ. РІШЕННЯ
Вивчіть Git за допомогою Bitbucket Cloud
Параметр dry run є захисним механізмом. Він дозволяє виконати пробний запуск команди git rm без видалення файлів.У вихідних даних відображаються файли, які потрібно видалити.
Параметр -r – це скорочення від слова recursive. При виконанні команди git rm у рекурсивному режимі вона видаляє не тільки каталог призначення, але й вміст його вкладених каталогів.
Параметр роздільника дозволяє явно відрізнити список імен файлів від аргументів, що передаються команді git rm . Розділювач корисний, коли якісь із файлів мають імена, аналогічні параметрам команди.
Параметр "cached" вказує, що повинні бути видалені тільки файли, що знаходяться в розділі проіндексованих файлів. Файли в робочому каталозі залишаються незайманими.
Цей параметр змушує команду завершитися зі статусом sigterm, що дорівнює 0, навіть якщо файли, вказані для видалення, не знайдені. Sigterm – це код стану в Unix. Код 0 вказує на успішний дзвінок команди. Параметр --ignore-unmatch може бути корисним, якщо команда git rm використовується у складі скрипта оболонки, який повинен забезпечувати коректну обробку відмови.
Параметр quiet приховує виведення команди git rm. Як правило, команда виводить по одному рядку на кожен віддалений файл.
Скасування змін, внесених командою git rm
Зміни, що вносяться під час виконання команди git rm , не є остаточними. Ця команда оновлює розділ проіндексованих файлів та робочий каталог. Зміни не збережуться, доки не буде створено новий коміт і вони не будуть додані в історію комітів. Отже, зміни, внесені командою git rm, можна «скасувати» за допомогою стандартних команд Git.
Команда git reset відновить розділ індексованих файлів та робочий каталог до комміту HEAD. В результаті зміни, внесені командою git rm, будуть скасовані.
Такого ж результату можна досягти за допомогою команди git checkout: вона відновить останню версію файлу із покажчика HEAD.
Якщо після виконання git rm було створено новий коміт, через який видалення збереглося, можна скористатися командою git reflog , щоб знайти посилання, що передує git rm . Докладніше про використання git reflog див. тут.
Пояснення
Аргумент , що передається команді, може містити точні шляхи, шаблони пошуку файлів або точні імена каталогів. При виконанні команди видаляються лише шляхи, зафіксовані в репозиторії Git за допомогою комітів.
У шаблонах пошуку файлів можна задавати імена каталогів. У разі використання шаблонів пошуку слід бути уважним. Розглянемо приклади: directory/* та directory* . Використання першого шаблону призведе до видалення всіх файлів у каталозі directory/ , тоді як другий викличе видалення всіх каталогів, ім'я яких починається на directory - наприклад directory1 , directory2 , directory_whatever і т.д. буд., що може бути небажаним.
Область дії команди git rm
Дія команди git rm поширюється лише на поточну гілку. Видалення виконується лише у деревах робочого каталогу та розділу проіндексованих файлів. Видалення файлу не зберігається в історії репозиторію доти, доки не створено новий коміт.
Чому слід використовувати git rm, а не rm
Репозиторій Git виявляє виконання стандартної команди оболонки rm для файлу, що відстежується, і відповідним чином оновлює робочий каталог. Але розділ проіндексованих файлів не оновлюється.Щоб внести зміни, для віддалених шляхів до файлів необхідно додатково виконати команду git add . Команда git rm зменшує кількість дій, оскільки оновлює при видаленні і робочий каталог, і розділ проіндексованих файлів.
Приклади
git rm Documentation/\*.txt
У цьому прикладі шаблон пошуку файлів використовується для видалення всіх файлів *.txt у каталозі Documentation та всіх його підкаталогів.
Зверніть увагу, що символ зірочки тут екранується символами косої риси. Це зроблено, щоб оболонка не розширювала шаблон. У такому варіанті він включає лише шляхи до файлів та підкаталогів, що знаходяться в каталозі Documentation/.
У цьому прикладі команда виконується з force для всіх файлів, відповідних шаблону підстановки git-*.sh . Параметр force явно видаляє цільові файли з робочого каталогу та розділу проіндексованих файлів.
Видалення файлів, яких вже немає у файловій системі
У розділі «Чому слід використовувати git rm, а не rm» говорилося про те, що команда git rm призначена для зручності: вона поєднує функції стандартної команди оболонки rm та команди git add, дозволяючи видалити файл із робочого каталогу та розділу проіндексованих файлів. Якщо видалити кілька файлів за допомогою стандартної команди оболонки rm, стан репозиторію може стати проблематичним.
Якщо потрібно записати всі явно видалені файли в наступний коміт, можна виконати команду git commit -a . Вона внесе всі події видалення до розділу проіндексованих файлів для підготовки до наступного коміту.
Якщо ж завдання безповоротно видалити файли, видалені за допомогою команди оболонки rm, потрібно скористатися наступною командою:
git diff --name-only --diff-filter = D-z | xargs -0 git rm --cached
Ця команда створить список віддалених файлів із робочого каталогу і передасть його команді git rm --cached , яка оновить розділ проіндексованих файлів.
Команда git rm: висновок
Команда git rm виконує дії над двома головними деревами управління внутрішнім станом Git: робочим каталогом та розділом проіндексованих файлів. Команда git rm дозволяє видаляти файли з репозиторію Git. Це зручний інструмент, що поєднує функції стандартної команди оболонки rm і команди git add : спочатку git rm видаляє цільовий об'єкт з файлової системи, а потім додає подію видалення розділ проіндексованих файлів. Ця команда є однією з багатьох, які можна використовувати для скасування змін до Git.
Видалення файлів зі сховища великих файлів Git
Якщо ви налаштували Git LFS для репозиторію, можна видалити всі файли або підмножина файлів з Git LFS.
У цій статті
Видалення одного файлу
- Видаліть файл із журналу Git репозиторію за допомогою команди filter-repo або BFG Repo-Cleaner. Докладні відомості про використання див. у розділі "Видалення конфіденційних даних з репозиторію".
- Перейдіть до GITATTRIBUTES-Файлу.
Note Файл .gitattributes зазвичай зберігається у локальному репозиторії. У деяких випадках може створюватись глобальний GITATTRIBUTES-файл, що містить усі зв'язки Git LFS.
Видалення всіх файлів у репозиторії Git LFS
- Видаліть файли з журналу Git репозиторію за допомогою команди filter-repo або BFG Repo-Cleaner. Докладні відомості про використання див. у розділі "Видалення конфіденційних даних з репозиторію".
- Щоб видалити Git LFS (якщо потрібно) у репозиторії, виконайте наступний код:
Об'єкти Git LFS у вашому репозиторії
Після видалення файлів з Git LFS об'єкти Git LFS залишаються у віддаленому сховищі та продовжують враховуватись у квоті сховища Git LFS.
Щоб видалити об'єкти Git LFS з репозиторію, видаліть репозиторій та створіть його знову. При видаленні репозиторію також видаляються всі пов'язані проблеми, зірки та виделки. Для отримання додаткових відомостей див. у розділі Видалення репозиторію. Якщо вам потрібно стерти віддалений об'єкт, а видалити репозиторій не вдається, зверніться до служби підтримки.
Якщо ви видалили один файл і мають інші об'єкти Git LFS , які ви хочете зберегти в репозиторії, після видалення та повторного створення репозиторію, переналаштуйте файли Git LFS. Для отримання додаткових відомостей див. у розділі "Видалення одного файлу" та "Налаштування Git Large File Storage".
Додаткові матеріали