Навіщо використовувати "git rm" для видалення файлу замість "rm"?


171

У SVN видалення чогось із файлової системи безпосередньо (а не використання svn) створило безліч головних болів.

Я не знайшов це проблемою при використанні git, але зауважую, що git має власну rmреалізацію ( git rm).

У чому різниця між rmі git rm?

Відповіді:


253

Якщо ви просто використовуєте rm, вам потрібно буде дотримуватися цього git add <fileRemoved>. git rmробить це за один крок.

Ви також можете скористатися git rm --cachedфайлом, який видалить файл з індексу (поклавши його на видалення під час наступного комітету), але збережіть свою копію в локальній файловій системі.


Хороша відповідь. Мені вдалося скористатися, git reset --hardа потім здійснити перевірку майстра, щоб вийти з відокремленого штату, тому що я знав, що у мене не було жодних неспроможних змін. Якщо ви не здійснили своїх змін, можливо, ви захочете зробити git stash, але я відносно новий git, тому я не знаю точної команди. Якщо ви завітали сюди в 2014 році або після цього, я сподіваюся, що ця відповідь була вам корисною.
Ерік Хепперл - CodeSlayer2010

@Andy - Якщо я використовував rm(замість git rm) та видаляв багато файлів за допомогою нього, а тепер не хочу gitвідстежувати їх. Чи є спосіб відновити зміни? Я хочу gitвступити rmяк видалений, оскільки не використовував його git rmв першу чергу.
Chetan Arvind Patil

Було б добре, якби це було чітко прописано в документах в Інтернеті (це може бути там, але це очевидно не очевидно або це питання не було б задано). Користувачам було б добре знати, що вони не роблять нічого поганого, якщо йдуть по маршруту OS rm. І є причини піти маршрутом ОС. Наприклад, якщо вам потрібно видалити файл, щоб перевірити, що щось працює, перш ніж здійснити зміну, маршрут ОС трохи безпечніший, ніж використання git rm, так як у випадку git вам потрібно зняти дію, тоді як у варіанті ОС просто у вас є приносити (я вірю).
боб

12

Видалення файлів за допомогою себе rmне є проблемою, але якщо ви хочете скористатись тим, що файл був видалений, вам доведеться все-таки зробити це git rm, так що ви можете це зробити так само, як миттєво.

Крім того, залежно від оболонки, git rmякщо ви видалили файл, ви не отримаєте завершення вкладки, тому вам доведеться самостійно прописати шлях, тоді як якщо ви, git rmпоки файл все ще існує, заповнення вкладки буде працювати нормально.


7

git rmвидалить файл із каталогу індексів та робочого каталогу (лише індекс, якщо ви використовували --cached), щоб видалення було поетапно для наступного виконання.


4

Однак якщо ви все-таки використовуєте rm замість git rm. Ви можете пропустити додавання git та безпосередньо здійснити зміни, використовуючи:

git commit -a


3

Видаліть файли з індексу, або з робочого дерева та індексу. git rm не видалить файл лише з вашого робочого каталогу.

Ось як можна видалити файл за допомогою, rm -fа потім видалити його з індексуgit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

Однак ви можете зробити це все за один раз просто git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html

2

Якщо ви використовуєте git rm, видалення буде частиною вашого наступного комітету. Тож якщо ви хочете натиснути зміну, слід використовувати git rm


2

Крім відповіді Енді, є додаткова корисність для git rm:

  1. Безпека : Якщо робити git rmзамість rm, Git заблокує видалення, якщо є невідповідність між HEADверсією файлу та індексом поетапної версії або версією робочого дерева. Цей блок є механізмом безпеки для запобігання видаленню незавершених змін.

  2. Захист : git rm --dry-run. Цей параметр є захистом, який виконує git rmкоманду, але фактично не видаляє файли. Натомість він видасть, які файли він би видалив.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.