Файловая система Git
Git
отслеживает файлы в трёх основных разделах:
- Рабочая директория, файловая система вашего компьютера
- Область подготовленных файлов
staging area
, хранит содержание следующего коммита HEAD
, последний коммит в репозитории
Все основные команды по работе с файлами сводятся к пониманию того, как Git управляет этими тремя разделами. Существует распространённое заблуждение, что область подготовленных файлов только хранит изменения. Лучше думать об этих трёх разделах как об отдельных файловых системах, каждая из которых содержит свои копии файлов.
Добавление изменённых файлов в индекс add
Добавить в индекс указанный файл, если он был изменён, удалён, или это новый файл:
git add имя_файла
Добавить в индекс все новые, изменённые, удалённые файлы из текущей директории и её поддиректорий:
git add .
Показать новые, изменённые файлы по очереди с указанием их изменений и вопросом об отслеживании и индексировании:
git add -p
Проверка новых файлов status
Показать состояние репозитория - отслеживаемые, изменённые, новые файлы:
git status
Получить более компактный вывод. Если файл не отслеживается, то будет выведено ??
если он был изменён, тогда его имя будет красным
, а если подготовлен зелёным
:
git status -s
Новые файлы имеют четыре состояния:
untracked
неотслеживаемый, находится в рабочей директории но нет ни одной версии в HEAD или в области подготовленных файлов (Git не знает о файле)modified
изменён, в рабочей директории есть более новая версия по сравнению с хранящейся в HEAD или в области подготовленных файлов (изменения не находятся в следующем коммите)staged
подготовлен, в рабочей директории и области подготовленных файлов есть более новая версия по сравнению с хранящейся в HEAD (готов к коммиту)без изменений
одна версия файла во всех разделах, в последнем коммите содержится актуальная версия
Просмотр изменений в файле diff
Посмотреть изменения не внесенные в индекс:
git diff
Посмотреть изменения внесенные в индекс:
git diff --cached
Посмотреть изменения в проекте по сравнению с последним коммитом:
git diff HEAD
Сравнить файл index.html
из рабочей директории и индекс:
git diff index.html
Посмотреть что сделано в ветке feature
по сравнению с веткой master
:
git diff master feature
Посмотреть что сделано в ветке feature
по сравнению с веткой master
, показать только имена файлов:
git diff --name-only master feature
Посмотреть что сделано в ветке feature
с момента коммита, расхождения с master
:
git diff master...feature
Удаление изменений в файлах из индекса reset
Убрать из индекса изменения указанного файла (в рабочей директории изменения сохранятся), после этого применяется git checkout имя_файла
:
git reset имя_файла
Убрать из индекса все добавленные в него изменения (в рабочей директории все изменения сохранятся), антипод git add .
, после этого применяется git checkout имя_файла
:
git reset .
Отмена изменений в файлах из индексе checkout
Отменить изменения в файле, вернуть состояние файла имеющееся в индексе:
git checkout имя_файла
Отменить изменения во всех файлах, вернуть состояние файлов имеющихся в индексе:
git checkout .
Удаление файла rm
Вычеркиваем файл из Git для отслеживания:
git rm --cached имя_файла
Вычеркиваем папку с файлами из Git для отслеживания:
git rm -r --cached имя_файла
Удалить отслеживаемый неизменённый файл и проиндексировать это изменение:
git rm имя_файла
Удалить отслеживаемый изменённый файл и проиндексировать это изменение:
git rm -f имя_файла
Удалить всё содержимое отслеживаемой директории log/
и проиндексировать это изменение:
git rm -r log/
Удалить все отслеживаемые файлы с именем, начинающимся на ind
в текущей директории и проиндексировать это изменение:
git rm ind*
Перемещение/переименование файла my
Переименовать файл text.txt
в test_new.txt
и проиндексировать это изменение:
git mv text.txt test_new.txt
Переместить файл readme_new.md
в директорию folder/
(должна существовать) и проиндексировать это изменение:
git mv readme_new.md folder/