Еще один важный практический вопрос при работе с Git - это операции с файлами.
В частности, это операции удаления и переименования файлов. В системе Git имеются специальные команды, которые очень похожи на консольные команды и 1
rm
в Linux/Mac OS. Но для Git они выглядят несколько иначе: 1
mv
- для удаления файлов и 1
git rm
- для переименования файлов. Ниже я рассмотрю обе эти комадны более подробно.1
git mv
Команда git rm
Для удаления файлов в системе Git, как уже упоминалось выше, имеется специальная команда . Ее отличие от обычной консольной команды 1
git rm
(в том же Linux) заключается в особенности самой системы Git.1
rm
Как хорошо известно, в системе Git файл может одновременно существовать в трех ипостасях: в области “Working Directory”, в области “Staging Area”, в области “Repository”. Удаление файла из области “Working Directory” не приведет к его удалению из областей “Staging Area” и “Repository”.
Поэтому, чтобы удалить файл, нужно (в идеале) выполнить три команды подряд для удаления файла из Рабочей области “Working Directory”, затем из области индекса “Staging Area” и потом из области репозитория “Repository”:
$ rm index.html
$ git add .
$ git commit -m 'Delete file index.html'Команда является ни чем иным, как “вшитым” в Git сокращением двух первых команд:1
git rm
$ rm index.html
$ git add .Сделано это всего лишь для удобства пользования системой Git. Давайте на примере посмотрим работу команды . Предположим, что имеется файл 1
git rm
, который проиндексирован и зафиксирован.1
index.html
Удалим его командой :1
git rm

Видим, что файл был сразу удален из двух областей: рабочего каталога “Working Directory” и области индексации “Staging Area”. Но в репозитории файл все же остался, о чем говорит вывод команды 1
index.html
.1
git status
Любой последующий commit зафиксирует удаление этого файла:

Команда git rm -cached
У команды имеется пара полезных ключей, одним из которых является ключ 1
git rm
. Задача этого ключа - позволить команде 1
--cached
удалить файл из области индексирования “Staging Area”, но при этом оставить его в области рабочего проекта “Working Directory”. Давайте рассмотрим пример, когда создан файл 1
git rm
и произведена его индексация (но не фиксация):1
second.html

Удалим его командой :1
git rm --cached

Отлично! Видим, что произошло удаление файла . Кроме того, команда 1
second.html
показывает, что в рабочей области “Working Directory” имеется неотслеживаемый (untracked) файл по имени 1
git status
.1
second.html
Команда git rm -f
В предыдущем разделе я рассмотрел вариант, когда созданный и проиндексированный файл удаляется из области индексирования “Staging Area”, но остается в области “Working Directory”. Выполняется это с помощью команды .1
git rm --cached
Логическим продолжением этой команды является та же самая команда , но с ключом 1
git rm
- 1
-f
. Такая команда удаляет проиндексированный (но еще не зафиксированный) файл как из области “Staging Area”, так и из области “Working Directory”.1
git rm -f
Давайте рассмотрим на примере созданного и проиндексированного файла его удаление с помощью команды 1
third.html
:1
git rm -f


Файл удален как из области “Staging Area”, так и из области “Working Directory”. В итоге можно сказать, что между командой 1
third.html
и командой 1
git rm -f
практически нет никакой разницы.1
git rm
Команда git mv - перемещение или переименование файлов
В системе Git имеется “своя” команда для перемещения или переименования файлов. Слово “своя” здесь не даром взято в кавычки - аналогия с командой полная. Команда 1
git rm
перемещает или переименовывает файлы, автоматически “уведомляя” об этих событиях область “Staging Area”:1
git mv

Остается только зафиксировать эти изменения любым коммитом:
$ git commit -m 'Move index.html to papka'
[master 868d428] Move index.html to papka
1 file changed, 0 insertions(+), 0 deletions(-)
rename index.html => papka/index.html (100%)Переименуем файл с помощью команды 1
index.html
:1
git mv

Вот и все несложные операции по перемещению\переименованию или удалению файлов с помощью команд и 1
git rm
, под всевидящим оком Git.1
git mv