Git Shelve в IntelliJ IDEA: отличие от git stash
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: #
- Хранение на диске: Изменения сохраняются как
.patchфайлы в папке.idea/shelf/внутри проекта - Локальность: Полки видны только в IDE, не добавляются в Git репозиторий
- GUI-интерфейс: Управление через удобный графический интерфейс
- Частичное сохранение: Можно выбрать конкретные файлы или даже отдельные строки для сохранения
- Быстрое переключение контекста: Идеально подходит для работы над несколькими задачами параллельно
Когда вы создаёте новую полку, IDE генерирует .patch файл с вашими изменениями. Эти файлы остаются на вашем компьютере и недоступны коллегам, если вы не поделитесь ими явно.
Как использовать Shelve в IntelliJ IDEA #
Создание полки (Shelve Changes) #
Процесс очень простой:
- Откройте вкладку Git в левой панели (или используйте View → Tool Windows → Git)
- Перейдите на вкладку Changes (Изменения)
- Нажмите правой кнопкой мыши на файлы, которые хотите сохранить, или на всю папку с изменениями
- Выберите Shelve Changes…
- Введите описательное имя для полки (например, “WIP: работа над авторизацией”)
- Нажмите Shelve
Альтернативный способ через меню:
- Git → Shelve Changes… (или используйте сочетание клавиш, которое можно настроить в настройках IDE)
Просмотр и управление полками #
Чтобы посмотреть все сохранённые полки:
- Откройте VCS → Shelve Changes → View Shelf
- Вы увидите список всех полок с датой создания и описанием
- Нажав на полку, можно посмотреть какие файлы в ней содержатся
Применение полки обратно (Unshelve) #
Когда вам снова нужны сохранённые изменения:
- Откройте VCS → Unshelve Changes… или найдите полку в View Shelf
- Выберите нужную полку из списка
- Нажмите Unshelve
- IDE применит все изменения из полки к вашим файлам
Удаление полки #
Если полка больше не нужна:
- Откройте View Shelf
- Выберите полку
- Нажмите правой кнопкой и выберите Delete Shelf или просто удалите её через контекстное меню
git stash vs Git Shelve: подробное сравнение #
Это самый важный раздел, так как многие разработчики путают эти два инструмента. Давайте разберёмся в различиях.
Сравнительная таблица #
| Критерий | git stash | Git 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 #
Вы работаете над новой фичей, но вдруг приходит срочный баг, который нужно исправить сразу:
- Текущую работу сохраняете в полку: Shelve Changes → “WIP: новая фича”
- Переходите на master/main ветку
- Исправляете баг и делаете commit
- Возвращаетесь на свою ветку разработки
- Применяете полку: Unshelve Changes → выбираете вашу полку
- Продолжаете работу
Сценарий 2: Code review #
Перед отправкой на review вы хотите убедиться, что на диске нет недоделанного кода:
- Сохраняете недоделанные части в полку: Shelve Changes
- Выполняете финальные тесты на чистом коде
- Отправляете на review
- После одобрения применяете полку обратно
Сценарий 3: Экспериментирование #
Вы хотите попробовать несколько подходов для решения проблемы:
- Сохраняете текущий подход в полку: Shelve Changes → “Попытка 1: использовать DI”
- Откатываете изменения на диске
- Пробуете новый подход
- Если не понравился - откатываете и применяете первую полку
- Если понравился - удаляете первую полку
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 лучше, чем временные ветки:
- Меньше захламления в истории ветвей
- Не требует коммитирования незавершённой работы
- Быстрее и удобнее
- Не создаёт “шум” в
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) изменения обратно? #
- Откройте VCS → Unshelve Changes… или Git → Shelve Changes → View Shelf
- Выберите нужную полку
- Нажмите Unshelve или дважды кликните на полку
Изменения будут применены к вашим текущим файлам.
Можно ли передать полку коллеге? #
Технически можно поделиться .patch файлом из папки .idea/shelf/, но это не рекомендуется. Лучше используйте:
- git stash с пушем на сервер (если нужна синхронизация)
- git branch для обмена кодом с командой
- git patch формат файла полки (отправьте как файл)
Для совместной работы лучше использовать стандартные Git инструменты.
Где хранятся файлы полок на диске? #
Все полки хранятся в папке .idea/shelf/ вашего проекта. Каждая полка — это отдельный .patch файл с названием, которое вы дали при создании.
Пропадают ли полки при переустановке IDE? #
Полки хранятся в папке .idea/ вашего проекта, поэтому они не пропадут при переустановке IDE, если вы:
- Не удалили папку проекта
- Папка
.idea/осталась на диске
Однако если вы удалите папку проекта или очистите кэш IDE, полки будут потеряны. Поэтому важные полки лучше превратить в коммиты или сохранить как отдельные .patch файлы.
Есть ли git shelve в VS Code? #
Нет встроенной функции Shelve в VS Code, так как это специфичное для JetBrains IDE. Однако в VS Code можно использовать расширения или просто использовать команды git stash в интегрированном терминале.
Рекомендуем либо использовать JetBrains IDE для работы с Shelve, либо переключиться на git stash в других редакторах.
Как отредактировать описание полки? #
К сожалению, в стандартной функциональности IntelliJ IDEA нельзя отредактировать описание полки. Решение:
- Удалите полку
- Создайте новую с правильным описанием
Или вручную отредактируйте .patch файл в папке .idea/shelf/, но это не рекомендуется.
Можно ли применить полку частично? #
Нет встроенной функции для частичного применения полки. Вариант решения:
- Примените полку полностью через Unshelve
- В редакторе вручную отбросьте ненужные изменения
- Или используйте 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
Оба инструмента решают одну и ту же проблему — временное сохранение изменений. Выбор зависит от того, где вы работаете и какой интерфейс вам комфортнее.
Успехов в разработке!