Как просмотреть все изменения в индексе (staging area) в Git?
Я подготовил несколько изменений для коммита и хочу увидеть реальные различия между моими изменёнными файлами и их предыдущими версиями. Хотя git status показывает только имена подготовленных файлов, мне нужно увидеть сами изменения в содержимом. Существует ли простая однострочная команда для отображения всех подготовленных изменений?
Документация Git упоминает, что с помощью git diff можно просматривать изменения относительно индекса (staging area), но я не уверен, как именно применить это для просмотра только подготовленных изменений.
Просмотр всех проиндексированных изменений в Git
- Базовая команда
- Понимание области индексации
- Сравнение с непроиндексированными изменениями
- Дополнительные параметры для просмотра проиндексированных изменений
- Практические примеры
- Типичные сценарии использования
Базовая команда
Самый простой способ просмотра всех проиндексированных изменений — использование команды git diff --staged или git diff --cached. Эти команды синтаксически идентичны и выполняют абсолютно одно и то же:
git diff --staged git diff --cached
Обе команды показывают различия между областью индексации (индексом) и последним коммитом. Это идеально подходит для просмотра того, что вы собираетесь закоммитить, перед тем как сделать это.
Важный момент: Флаг
--stagedбыл введен в Git 1.6.1, в то время как--cachedдоступен с более ранних версий. Оба флага взаимозаменяемы, и вы можете использовать любой из них по своему усмотрению.
Понимание области индексации
Прежде чем углубляться в детали, важно понять, как работает область индексации в Git:
- Рабочая директория: Ваши фактические файлы на диске
- Область индексации (Индекс): То, что вы подготовили для следующего коммита
- HEAD: Последний коммит, который вы сделали
Когда вы выполняете git add, вы перемещаете изменения из рабочей директории в область индексации. Когда вы выполняете git commit, вы перемещаете изменения из области индексации в репозиторий.
Документация Git объясняет, что git diff без аргументов сравнивает рабочую директорию с областью индексации, в то время как git diff --staged сравнивает область индексации с последним коммитом.
Сравнение с непроиндексированными изменениями
Вы можете легко сравнивать различные типы изменений, отслеживаемые Git:
| Команда | Сравнивает | Показывает |
|---|---|---|
git diff |
Рабочая директория vs Область индексации | Непроиндексированные изменения |
git diff --staged |
Область индексации vs Последний коммит | Проиндексированные изменения |
git diff HEAD |
Рабочая директория vs Последний коммит | Все изменения (непроиндексированные + проиндексированные) |
Это дает вам полную картину ваших изменений:
# Просмотр того, что вы собираетесь закоммитить
git diff --staged
# Просмотр измененного, но не проиндексированного содержимого
git diff
# Просмотр всех изменений относительно последнего коммита
git diff HEAD
Дополнительные параметры для просмотра проиндексированных изменений
Вы можете улучшить отображение проиндексированных различий с помощью нескольких полезных параметров:
Цветной вывод
git diff --staged --color=always
Показ контекстных строк
git diff --staged --unified=5 # Показать 5 строк контекста
Сравнение на уровне слов
git diff --staged --word-diff
Показ только измененных файлов
git diff --staged --name-only
Комбинирование с другими параметрами
git diff --staged --stat # Показать статистику вместо полного diff
git diff --staged --ignore-space-change # Игнорировать изменения в пробелах
Практические примеры
Пример 1: Просмотр перед коммитом
# Проиндексировать некоторые изменения
git add file1.txt file2.py
# Просмотреть проиндексированные изменения
git diff --staged
# Если все в порядке, закоммитить
git commit -m "Обновление файлов"
Пример 2: Интерактивная индексация
# Просмотреть измененное содержимое
git diff
# Проиндексировать определенные части изменений
git add -p
# Просмотреть, что проиндексировано
git diff --staged
# При необходимости продолжить индексацию других файлов
git add another_file.txt
# Финальный просмотр
git diff --staged
Пример 3: Diff для нескольких файлов
# Проиндексировать изменения в нескольких файлах
git add *.js
# Просмотреть все проиндексированные изменения JavaScript
git diff --staged -- '*.js'
Типичные сценарии использования
Предкоммитный просмотр
Всегда выполняйте git diff --staged перед коммитом, чтобы убедиться, что вы коммитируете именно то, что планировали:
git status
git diff --staged
git commit -m "Сообщение"
Частичные коммиты
При работе над несколькими функциями в одной ветке используйте diff проиндексированных изменений для создания сфокусированных коммитов:
# Проиндексировать изменения для функции 1
git add feature1/*
# Просмотреть и закоммитить функцию 1
git diff --staged
git commit -m "Реализация функции 1"
# Проиндексировать изменения для функции 2
git add feature2/*
# Просмотреть и закоммитить функцию 2
git diff --staged
git commit -m "Реализация функции 2"
Совместная разработка
При работе с другими разработчиками используйте diff проиндексированных изменений для проверки ваших изменений перед отправкой:
git add . git diff --staged git commit git push
Заключение
- Используйте
git diff --stagedилиgit diff --cachedдля просмотра всех проиндексированных изменений перед коммитом - Эта команда показывает именно то, что будет включено в следующий коммит
- Комбинируйте с другими параметрами, такими как
--stat,--colorили--word-diff, для разных предпочтений отображения - Сделайте привычкой просматривать diff проиндексированных изменений перед коммитом для создания чистых и сфокусированных коммитов
- Рабочий процесс с областью индексации позволяет точный контроль над тем, что попадает в каждый коммит
Освоив команду git diff --staged, вы получаете лучший контроль над рабочим процессом управления версиями и можете создавать более осознанные, хорошо организованные коммиты.