↓Перейти к содержанию
  1. Git: руководства и команды/

Git Shelve в IntelliJ IDEA: отличие от git stash

··9 минут·

Git Shelve (Shelve Changes) — это мощный инструмент в JetBrains IDE, который позволяет быстро сохранять текущие изменения без необходимости их коммитить. Хотя название содержит слово “git”, это вовсе не встроенная команда Git, а фирменная функция интегрированной среды разработки. В этой статье мы подробно разберём, как использовать Shelve, чем он отличается от git stash, и когда выбирать каждый инструмент.

Что такое Git Shelve (Shelve Changes) #

Git Shelve — это функция JetBrains IDE (IntelliJ IDEA, PyCharm, WebStorm, GoLand, Rider и других), которая сохраняет текущие изменения файлов в специальные файлы полок (shelves). Важно понимать, что это не команда Git, а особенность самой IDE.

Ключевые характеристики Shelve: #

  1. Хранение на диске: Изменения сохраняются как .patch файлы в папке .idea/shelf/ внутри проекта
  2. Локальность: Полки видны только в IDE, не добавляются в Git репозиторий
  3. GUI-интерфейс: Управление через удобный графический интерфейс
  4. Частичное сохранение: Можно выбрать конкретные файлы или даже отдельные строки для сохранения
  5. Быстрое переключение контекста: Идеально подходит для работы над несколькими задачами параллельно

Когда вы создаёте новую полку, IDE генерирует .patch файл с вашими изменениями. Эти файлы остаются на вашем компьютере и недоступны коллегам, если вы не поделитесь ими явно.

Как использовать Shelve в IntelliJ IDEA #

Создание полки (Shelve Changes) #

Процесс очень простой:

  1. Откройте вкладку Git в левой панели (или используйте View → Tool Windows → Git)
  2. Перейдите на вкладку Changes (Изменения)
  3. Нажмите правой кнопкой мыши на файлы, которые хотите сохранить, или на всю папку с изменениями
  4. Выберите Shelve Changes…
  5. Введите описательное имя для полки (например, “WIP: работа над авторизацией”)
  6. Нажмите Shelve

Альтернативный способ через меню:

  • Git → Shelve Changes… (или используйте сочетание клавиш, которое можно настроить в настройках IDE)

Просмотр и управление полками #

Чтобы посмотреть все сохранённые полки:

  1. Откройте VCS → Shelve Changes → View Shelf
  2. Вы увидите список всех полок с датой создания и описанием
  3. Нажав на полку, можно посмотреть какие файлы в ней содержатся

Применение полки обратно (Unshelve) #

Когда вам снова нужны сохранённые изменения:

  1. Откройте VCS → Unshelve Changes… или найдите полку в View Shelf
  2. Выберите нужную полку из списка
  3. Нажмите Unshelve
  4. IDE применит все изменения из полки к вашим файлам

Удаление полки #

Если полка больше не нужна:

  1. Откройте View Shelf
  2. Выберите полку
  3. Нажмите правой кнопкой и выберите Delete Shelf или просто удалите её через контекстное меню

git stash vs Git Shelve: подробное сравнение #

Это самый важный раздел, так как многие разработчики путают эти два инструмента. Давайте разберёмся в различиях.

Сравнительная таблица #

Критерийgit stashGit Shelve (IntelliJ)
Где хранитсяВ Git репозитории (stash stack)На диске как .patch файлы в .idea/
Виден коллегамНетНет (не в git)
Доступен без IDEДа (через терминал или другие IDE)Нет, только в JetBrains IDE
Партиальное сохранениеДа (–patch флаг)Да (удобный GUI с галочками)
Сохраняет staged отдельноОпционально (флаг -u)Да, автоматически
Сохранение индексаХранит состояние staged файловНе требуется
Синхронизация между IDEЕсли используете разные IDEКаждой IDE своя полка
Типичное использованиеCI/CD, скрипты, любая IDE, командная строкаЛокальная работа в JetBrains IDE
Способность делитьсяНет (локально)Нет (локально)
Сложность использованияНужно помнить командыПростой GUI

Когда использовать git stash #

git stash подходит в следующих сценариях:

  • Работаете с несколькими IDE или переходите между IDE и терминалом
  • Используете автоматизацию (скрипты, CI/CD) для управления изменениями
  • Нужно сохранить состояние staged файлов отдельно от unstaged
  • Разрабатываете на разных машинах и хотите быть уверены в консистентности

Когда использовать Git Shelve #

Git Shelve лучше подходит для:

  • Локальной работы в одной JetBrains IDE
  • Быстрого переключения между задачами в IDE
  • Сохранения частичных изменений через удобный графический интерфейс
  • Экспериментов с кодом без необходимости помнить команды Git

Команды git stash: аналог Shelve для командной строки #

Если вы предпочитаете работать с командной строкой или нужна кроссплатформенность, используйте git stash. Вот основные команды:

# Сохранить все текущие изменения с описанием
git stash push -m "работа над авторизацией"

# Сохранить все изменения (короткий вариант)
git stash save "описание"

# Посмотреть список всех сохранённых stash'ей
git stash list

# Применить последний stash и удалить его из списка
git stash pop

# Применить конкретный stash без удаления из списка
git stash apply stash@{0}

# Посмотреть изменения в stash'е
git stash show -p stash@{0}

# Удалить конкретный stash
git stash drop stash@{0}

# Удалить все stash'и
git stash clear

# Создать новую ветку из stash'а
git stash branch feature/new-work stash@{0}

Для более подробной информации о git stash, смотрите наше подробное руководство по git stash.

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

Сценарий 1: Срочный bugfix #

Вы работаете над новой фичей, но вдруг приходит срочный баг, который нужно исправить сразу:

  1. Текущую работу сохраняете в полку: Shelve Changes → “WIP: новая фича”
  2. Переходите на master/main ветку
  3. Исправляете баг и делаете commit
  4. Возвращаетесь на свою ветку разработки
  5. Применяете полку: Unshelve Changes → выбираете вашу полку
  6. Продолжаете работу

Сценарий 2: Code review #

Перед отправкой на review вы хотите убедиться, что на диске нет недоделанного кода:

  1. Сохраняете недоделанные части в полку: Shelve Changes
  2. Выполняете финальные тесты на чистом коде
  3. Отправляете на review
  4. После одобрения применяете полку обратно

Сценарий 3: Экспериментирование #

Вы хотите попробовать несколько подходов для решения проблемы:

  1. Сохраняете текущий подход в полку: Shelve Changes → “Попытка 1: использовать DI”
  2. Откатываете изменения на диске
  3. Пробуете новый подход
  4. Если не понравился - откатываете и применяете первую полку
  5. Если понравился - удаляете первую полку

Git Shelve в других JetBrains IDE #

Git Shelve доступен во всех JetBrains IDE:

  • IntelliJ IDEA - полная поддержка
  • PyCharm - полная поддержка
  • WebStorm - полная поддержка
  • GoLand - полная поддержка
  • Rider - полная поддержка
  • PhpStorm - полная поддержка
  • CLion - полная поддержка
  • Android Studio - полная поддержка

Функциональность одинакова во всех IDE, поэтому если вы научились использовать Shelve в IntelliJ IDEA, вы сразу сможете пользоваться им в PyCharm или любой другой JetBrains IDE.

Где хранятся файлы полок на диске #

Все файлы полок хранятся в папке .idea/shelf/ вашего проекта:

проект/
├── .idea/
│   ├── shelf/
│   │   ├── WIP_работа_над_авторизацией.patch
│   │   ├── Попытка_1_использовать_DI.patch
│   │   └── ...
│   └── ...
├── src/
└── ...

Нужно ли добавлять .idea/shelf/ в .gitignore? #

Ответ: зависит от вашего рабочего процесса.

Добавьте в .gitignore если:

  • Полки содержат конфиденциальную информацию
  • Вы хотите, чтобы каждый разработчик имел свои полки
  • Работаете в открытом проекте на GitHub

НЕ добавляйте в .gitignore если:

  • Работаете в закрытом проекте с командой
  • Хотите использовать полки как форму общения в команде (например, сохранить полезный рефакторинг для коллеги)
  • Используете полки как версионирование экспериментов

Обычно в .gitignore уже игнорируется вся папка .idea/, поэтому полки никогда не попадут в Git репозиторий.

Если вы захотели всё-таки закоммитить полки, убедитесь, что удалили .idea из .gitignore:

# Проверить текущий .gitignore
cat .gitignore

# Если там есть ".idea", отредактируйте и удалите эту строку
nano .gitignore  # или любой другой редактор

Интеграция Shelve с Git в IDE #

IntelliJ IDEA автоматически синхронизирует информацию о ветках, коммитах и других Git данных с функцией Shelve. Когда вы применяете полку, IDE умно обрабатывает конфликты слияния, если ваш код изменился после того, как вы сохранили полку.

Для более глубокого понимания работы с Git в IDE, рекомендуем прочитать наше руководство по Git в IntelliJ IDEA.

Сравнение с другими инструментами #

Git Shelve vs git stash vs git checkout #

  • Git Shelve: Полки в IDE, .patch файлы, только в JetBrains
  • git stash: Встроенная Git функция, работает везде, даже в консоли
  • git checkout: Переключение веток или откат файлов, не сохраняет изменения

Git Shelve vs git branch #

Иногда разработчики создают временные ветки вместо использования stash или shelve:

# Плохая практика
git checkout -b temp-work
git commit -m "временная работа"
git checkout master

# Хорошая практика
# Используйте shelve в IDE или git stash

Причины, почему shelve/stash лучше, чем временные ветки:

  1. Меньше захламления в истории ветвей
  2. Не требует коммитирования незавершённой работы
  3. Быстрее и удобнее
  4. Не создаёт “шум” в git log

Для лучшего понимания работы с Git, изучите наше руководство по git diff и другие инструменты для анализа изменений.

Часто задаваемые вопросы (FAQ) #

Что такое Git Shelve в IntelliJ IDEA? #

Git Shelve (Shelve Changes) — это функция JetBrains IDE, которая сохраняет текущие изменения файлов в виде .patch файлов в папке .idea/shelf/ проекта. Это позволяет быстро переключаться между задачами без необходимости коммитить незавершённую работу.

Чем git stash отличается от git shelve? #

Основные различия:

  • git stash — встроенная команда Git, хранится в репозитории, доступна везде (терминал, другие IDE)
  • Git Shelve — функция JetBrains IDE, хранится как .patch файлы, доступна только в IDE

Выбирайте stash, если работаете с несколькими IDE или в команде. Выбирайте shelve, если работаете исключительно в JetBrains IDE и цените удобство GUI.

Как применить (unshelve) изменения обратно? #

  1. Откройте VCS → Unshelve Changes… или Git → Shelve Changes → View Shelf
  2. Выберите нужную полку
  3. Нажмите Unshelve или дважды кликните на полку

Изменения будут применены к вашим текущим файлам.

Можно ли передать полку коллеге? #

Технически можно поделиться .patch файлом из папки .idea/shelf/, но это не рекомендуется. Лучше используйте:

  • git stash с пушем на сервер (если нужна синхронизация)
  • git branch для обмена кодом с командой
  • git patch формат файла полки (отправьте как файл)

Для совместной работы лучше использовать стандартные Git инструменты.

Где хранятся файлы полок на диске? #

Все полки хранятся в папке .idea/shelf/ вашего проекта. Каждая полка — это отдельный .patch файл с названием, которое вы дали при создании.

Пропадают ли полки при переустановке IDE? #

Полки хранятся в папке .idea/ вашего проекта, поэтому они не пропадут при переустановке IDE, если вы:

  1. Не удалили папку проекта
  2. Папка .idea/ осталась на диске

Однако если вы удалите папку проекта или очистите кэш IDE, полки будут потеряны. Поэтому важные полки лучше превратить в коммиты или сохранить как отдельные .patch файлы.

Есть ли git shelve в VS Code? #

Нет встроенной функции Shelve в VS Code, так как это специфичное для JetBrains IDE. Однако в VS Code можно использовать расширения или просто использовать команды git stash в интегрированном терминале.

Рекомендуем либо использовать JetBrains IDE для работы с Shelve, либо переключиться на git stash в других редакторах.

Как отредактировать описание полки? #

К сожалению, в стандартной функциональности IntelliJ IDEA нельзя отредактировать описание полки. Решение:

  1. Удалите полку
  2. Создайте новую с правильным описанием

Или вручную отредактируйте .patch файл в папке .idea/shelf/, но это не рекомендуется.

Можно ли применить полку частично? #

Нет встроенной функции для частичного применения полки. Вариант решения:

  1. Примените полку полностью через Unshelve
  2. В редакторе вручную отбросьте ненужные изменения
  3. Или используйте git diff для просмотра и выбора нужных изменений

Что если я применил полку, но на диске произошли конфликты? #

IntelliJ IDEA автоматически покажет диалог слияния (Merge Dialog) с опциями:

  • Accept Ours - оставить текущий код
  • Accept Theirs - принять код из полки
  • Merge - ручное разрешение конфликта

Выберите нужный вариант для каждого конфликта.

Заключение #

Git Shelve — это мощный инструмент для локальной работы в JetBrains IDE, который позволяет быстро переключаться между задачами без необходимости коммитить незавершённую работу. Хотя это не встроенная Git функция, она идеально интегрирована в IDE и предоставляет удобный GUI для работы с изменениями.

Выбирайте между Shelve и git stash в зависимости от вашего рабочего процесса:

  • Работаете в JetBrains IDE → используйте Git Shelve
  • Работаете с несколькими IDE или в командной строке → используйте git stash

Оба инструмента решают одну и ту же проблему — временное сохранение изменений. Выбор зависит от того, где вы работаете и какой интерфейс вам комфортнее.

Успехов в разработке!