Gernar
Git, сборка и DevOps

Как временно сохранять изменения в коде в локальном хранилище Git

Разбор вопроса «Как временно сохранять изменения в коде в локальном хранилище Git» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.

Вопрос

Как временно сохранять изменения в коде в локальном хранилище Git

Профессия

Frontend Developer

Что хочет услышать интервьюер

Интервьюер хочет убедиться, что кандидат понимает, как временно сохранять изменения в Git без создания коммитов, и знает основные команды для работы с stash. Также важно, чтобы кандидат мог объяснить практическое применение этой функциональности в рабочих процессах.

Ключевые тезисы

  • Использовать команду git stash для временного сохранения изменений без коммита. Это особенно полезно, когда нужно переключиться на другую ветку, но текущие изменения ещё не готовы для коммита.
  • Команда git stash save "описание изменений" позволяет добавить описание к временно сохранённым изменениям, что упрощает их идентификацию позже.
  • Для просмотра списка всех сохранённых изменений использовать git stash list. Это поможет выбрать нужный stash для восстановления.
  • Восстановить изменения можно командой git stash apply (без удаления из stash) или git stash pop (с удалением из stash). Указать конкретный stash можно через его индекс, например, git stash apply stash@{1}.

Подробный ответ

Команда git stash — это мощный инструмент Git для временного сохранения изменений в рабочей директории и индексе без создания коммита. Это особенно полезно, когда вам нужно быстро переключиться на другую ветку, но текущие изменения ещё не готовы для коммита. Stash сохраняет изменения в стеке, что позволяет вернуться к ним позже. Основные команды: git stash save (или просто git stash) для сохранения, git stash list для просмотра списка сохранённых изменений, git stash apply или git stash pop для восстановления. Разница между apply и pop в том, что pop удаляет изменения из стека после применения, а apply оставляет их там. Также можно указывать конкретный stash по индексу, например, git stash apply stash@{1}.

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

Пример 1

Вы работаете над новой функцией в ветке feature/login, но вам срочно нужно переключиться на ветку main для исправления бага. Выполните git stash save "WIP: login form changes", чтобы сохранить текущие изменения. После исправления бага вернитесь к своей ветке и восстановите изменения командой git stash pop.

Пример 2

У вас несколько stash-ей, и вы хотите применить конкретный. Сначала просмотрите список: `git stash list`. Затем примените нужный stash: `git stash apply stash@{2}`. Если stash больше не нужен, удалите его: `git stash drop stash@{2}`.

Частые ошибки

  • Типичная ошибка — забывать добавлять описание к stash (git stash save "описание"), что затрудняет идентификацию изменений позже.
  • Ещё одна ошибка — использовать git stash pop без проверки списка stash-ей, что может привести к применению не тех изменений.

Связанные темы

  • Работа с ветками в Git (branching)
  • Интерактивное добавление изменений в индекс (git add -p)
  • Отмена изменений в Git (git reset, git checkout)

Follow-up вопросы

Чем отличается git stash apply от git stash pop?

Уровень: basic

git stash apply восстанавливает изменения из stash, но оставляет их в списке stash. git stash pop также восстанавливает изменения, но удаляет их из списка stash после применения.

Как удалить ненужный stash?

Уровень: intermediate

Для удаления конкретного stash используется команда git stash drop stash@{n}, где n — индекс stash. Чтобы удалить все stash, можно использовать git stash clear.

Можно ли применить stash к другой ветке?

Уровень: intermediate

Да, stash можно применить к любой ветке. Для этого нужно переключиться на нужную ветку и выполнить git stash apply или git stash pop. Однако возможны конфликты, если изменения несовместимы.

Как создать новую ветку из stash?

Уровень: advanced

Для создания новой ветки из stash используется команда git stash branch <имя_ветки> stash@{n}. Это создаст новую ветку, применит stash и удалит его из списка, если не возникнет конфликтов.

Какие опции есть у git stash для выборочного сохранения изменений?

Уровень: advanced

git stash поддерживает опции --keep-index (сохраняет проиндексированные изменения), --include-untracked (добавляет неотслеживаемые файлы) и --patch (интерактивный режим для выбора изменений).

Содержание