НейроАгент

Просмотр проиндексированных изменений в Git: Полное руководство

Узнайте, как просматривать все проиндексированные изменения в Git с помощью git diff --staged или git diff --cached. Полное руководство с примерами и расширенными опциями для улучшения рабочего процесса контроля версий.

Вопрос

Как просмотреть все изменения в индексе (staging area) в Git?

Я подготовил несколько изменений для коммита и хочу увидеть реальные различия между моими изменёнными файлами и их предыдущими версиями. Хотя git status показывает только имена подготовленных файлов, мне нужно увидеть сами изменения в содержимом. Существует ли простая однострочная команда для отображения всех подготовленных изменений?

Документация Git упоминает, что с помощью git diff можно просматривать изменения относительно индекса (staging area), но я не уверен, как именно применить это для просмотра только подготовленных изменений.

НейроАгент

Просмотр всех проиндексированных изменений в Git

Базовая команда

Самый простой способ просмотра всех проиндексированных изменений — использование команды git diff --staged или git diff --cached. Эти команды синтаксически идентичны и выполняют абсолютно одно и то же:

bash
git diff --staged
git diff --cached

Обе команды показывают различия между областью индексации (индексом) и последним коммитом. Это идеально подходит для просмотра того, что вы собираетесь закоммитить, перед тем как сделать это.

Важный момент: Флаг --staged был введен в Git 1.6.1, в то время как --cached доступен с более ранних версий. Оба флага взаимозаменяемы, и вы можете использовать любой из них по своему усмотрению.

Понимание области индексации

Прежде чем углубляться в детали, важно понять, как работает область индексации в Git:

  1. Рабочая директория: Ваши фактические файлы на диске
  2. Область индексации (Индекс): То, что вы подготовили для следующего коммита
  3. HEAD: Последний коммит, который вы сделали

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

Документация Git объясняет, что git diff без аргументов сравнивает рабочую директорию с областью индексации, в то время как git diff --staged сравнивает область индексации с последним коммитом.

Сравнение с непроиндексированными изменениями

Вы можете легко сравнивать различные типы изменений, отслеживаемые Git:

Команда Сравнивает Показывает
git diff Рабочая директория vs Область индексации Непроиндексированные изменения
git diff --staged Область индексации vs Последний коммит Проиндексированные изменения
git diff HEAD Рабочая директория vs Последний коммит Все изменения (непроиндексированные + проиндексированные)

Это дает вам полную картину ваших изменений:

bash
# Просмотр того, что вы собираетесь закоммитить
git diff --staged

# Просмотр измененного, но не проиндексированного содержимого
git diff

# Просмотр всех изменений относительно последнего коммита
git diff HEAD

Дополнительные параметры для просмотра проиндексированных изменений

Вы можете улучшить отображение проиндексированных различий с помощью нескольких полезных параметров:

Цветной вывод

bash
git diff --staged --color=always

Показ контекстных строк

bash
git diff --staged --unified=5  # Показать 5 строк контекста

Сравнение на уровне слов

bash
git diff --staged --word-diff

Показ только измененных файлов

bash
git diff --staged --name-only

Комбинирование с другими параметрами

bash
git diff --staged --stat  # Показать статистику вместо полного diff
git diff --staged --ignore-space-change  # Игнорировать изменения в пробелах

Практические примеры

Пример 1: Просмотр перед коммитом

bash
# Проиндексировать некоторые изменения
git add file1.txt file2.py

# Просмотреть проиндексированные изменения
git diff --staged

# Если все в порядке, закоммитить
git commit -m "Обновление файлов"

Пример 2: Интерактивная индексация

bash
# Просмотреть измененное содержимое
git diff

# Проиндексировать определенные части изменений
git add -p

# Просмотреть, что проиндексировано
git diff --staged

# При необходимости продолжить индексацию других файлов
git add another_file.txt

# Финальный просмотр
git diff --staged

Пример 3: Diff для нескольких файлов

bash
# Проиндексировать изменения в нескольких файлах
git add *.js

# Просмотреть все проиндексированные изменения JavaScript
git diff --staged -- '*.js'

Типичные сценарии использования

Предкоммитный просмотр

Всегда выполняйте git diff --staged перед коммитом, чтобы убедиться, что вы коммитируете именно то, что планировали:

bash
git status
git diff --staged
git commit -m "Сообщение"

Частичные коммиты

При работе над несколькими функциями в одной ветке используйте diff проиндексированных изменений для создания сфокусированных коммитов:

bash
# Проиндексировать изменения для функции 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 проиндексированных изменений для проверки ваших изменений перед отправкой:

bash
git add .
git diff --staged
git commit
git push

Заключение

  • Используйте git diff --staged или git diff --cached для просмотра всех проиндексированных изменений перед коммитом
  • Эта команда показывает именно то, что будет включено в следующий коммит
  • Комбинируйте с другими параметрами, такими как --stat, --color или --word-diff, для разных предпочтений отображения
  • Сделайте привычкой просматривать diff проиндексированных изменений перед коммитом для создания чистых и сфокусированных коммитов
  • Рабочий процесс с областью индексации позволяет точный контроль над тем, что попадает в каждый коммит

Освоив команду git diff --staged, вы получаете лучший контроль над рабочим процессом управления версиями и можете создавать более осознанные, хорошо организованные коммиты.

Источники

  1. Официальная документация Git - git-diff
  2. Книга Pro Git - Просмотр проиндексированных и непроиндексированных изменений
  3. Учебник Git от Atlassian - Область индексации