Файловая система Git
Git отслеживает файлы в трёх основных разделах:
- Рабочая директория, файловая система вашего компьютера
- Область подготовленных файлов
staging area, хранит содержание следующего коммита HEAD, последний коммит в репозитории
Все основные команды по работе с файлами сводятся к пониманию того, как Git управляет этими тремя разделами. Существует распространённое заблуждение, что область подготовленных файлов только хранит изменения. Лучше думать об этих трёх разделах как об отдельных файловых системах, каждая из которых содержит свои копии файлов.
Проверка новых файлов status
Показать состояние репозитория — отслеживаемые, изменённые, новые файлы:
git status
Получить более развернутый вывод. по всем файлам:
git status --untracked-files=all
Получить более компактный вывод, если файл не отслеживается, то будет выведено ?? если он был изменён, тогда его имя будет красным, а если подготовлен зелёным:
git status -s
Новые файлы имеют четыре состояния:
untrackedнеотслеживаемый, находится в рабочей директории, но нет ни одной версии в HEAD или в области подготовленных файлов (Git не знает о файле)modifiedизменён, в рабочей директории есть более новая версия по сравнению с хранящейся в HEAD или в области подготовленных файлов (изменения не находятся в следующем коммите)stagedподготовлен, в рабочей директории и области подготовленных файлов есть более новая версия по сравнению с хранящейся в HEAD (готов к коммиту)без измененийодна версия файла во всех разделах, в последнем коммите содержится актуальная версия
Добавление изменённых файлов в индекс add
Добавить в индекс указанный файл, если он был изменён, удалён, или это новый файл:
git add имя_файла
Добавить в индекс все новые, изменённые, удалённые файлы из текущей директории и её поддиректорий:
git add .
Показать новые, изменённые файлы по очереди с указанием их изменений и вопросом об отслеживании и индексировании:
git add -p
Просмотр изменений в файле 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 master...feature
Сравнить локальную ветвь main с удалённой origin/main, чтобы команда работала, нужно сначала выполнить git fetch, это обновит информацию о ветвях в удалённом репозитории:
git diff main origin/main
Удаление изменений в файлах из индекса reset
Убрать из индекса изменения указанного файла (в рабочей директории изменения сохранятся), после этого применяется git checkout имя_файла:
git reset имя_файла
Убрать из индекса все добавленные в него изменения (в рабочей директории все изменения сохранятся), антипод git add ., после этого применяется git checkout имя_файла:
git reset .
Отмена изменений в файлах из индексе checkout
Отменить изменения в файле, вернуть состояние файла имеющееся в индексе:
git checkout имя_файла
Отменить изменения во всех файлах, вернуть состояние файлов имеющихся в индексе:
git checkout .
Создать новый коммит для отмены изменений revert
Команда revert создаёт новый коммит, который отменяет изменения внесённые в переданном коммите, или последовательности коммитов.
- Команда не удаляет историю с ранее внесёнными изменениями коммитами
- Можно выбрать любой отдельный коммит в истории проекта, в то время как команда
resetможет отменить только коммит, предшествующий текущему - После выполнения команды открывается меню с вводом сообщения для нового коммита, можно ввести своё сообщение или оставить текст по умолчанию в формате
Revert
Если сделан ненужный коммит, чтобы определить его идентификатор для отмены, введите:
git log
Ответный вывод:
commit 2e3c670bfe46a5d7c5
Author: Lisov Vadim lisov@termoros.com
Date: Sun Mar 8 17:13:40 2026 +0000
Для отмены коммита, нужно выполнить команду с идентификатором удаляемого изменения:
git revert 2e3c670bfe46a5d7c5
В итоге у вас будет новый коммит, который откатит изменения по указанному идентификатору, а еще откроет редактор. В нем можно указать причину отмены.
При этом важно учесть, что при использовании revert могут возникать конфликты слияния, их придется править вручную.
Удаление файла 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/