Зачем использовать 'git rm' для удаления файла вместо 'rm'?

В SVN, удаляя что-то из файловой системы напрямую (а не используя svn), создается нагрузка от головных болей. До сих пор, используя git, я не нашел, что это проблема, но я замечаю, что git имеет собственную реализацию rm.

Есть ли разница? Я что-то делаю неправильно?

Ответ 1

Если вы просто используете rm, вам нужно будет следить за ним с помощью git add <fileRemoved>. git rm делает это за один шаг.

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

Ответ 2

Удаление файлов с помощью rm само по себе не является проблемой, но если вы хотите зафиксировать, что файл был удален, вам все равно придется делать git rm, так что вы можете так же сделать это правильно с летучей мыши.

Кроме того, в зависимости от вашей оболочки, выполняя git rm после удаления файла, вы не получите завершение табуляции, поэтому вам придется прописать путь самостоятельно, тогда как если вы git rm пока файл все еще существует, выполнение вкладок будет работать как обычно.

Ответ 3

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

Ответ 4

При использовании git rm удаление будет частью вашего следующего коммита. Поэтому, если вы хотите нажать на изменение, вы должны использовать git rm

Ответ 5

Однако, если вы в конечном итоге используете rm вместо git rm. Вы можете пропустить git добавить и напрямую зафиксировать изменения, используя:

git commit -a

Ответ 6

Удалите файлы из индекса или из рабочего дерева и индекса. 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