Что делает `git stash` и как восстановить изменения?

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

Для восстановления изменений используйте:

git stash apply - применяет последние сохраненные изменения из stash.

git stash pop - применяет последние сохраненные изменения и удаляет их из stash.

Если нужно применить конкретный stash (а не последний), можно указать его идентификатор: git stash apply stash@{номер} (например, stash@{0} для последнего)


Команда git stash позволяет временно сохранить локальные изменения в вашем рабочем каталоге и индексе (staging area), чтобы вы могли переключиться на другую ветку, выполнить pull или сделать другую операцию, требующую чистый рабочий каталог. По сути, она создает "стек" ваших изменений, позволяя отложить их, а затем вернуться к ним позже.

Что именно происходит:

  • git stash сохраняет незафиксированные изменения (измененные и добавленные файлы).
  • После сохранения, ваш рабочий каталог возвращается к состоянию HEAD (последнему коммиту в текущей ветке).

Как восстановить изменения из stash:

Существует несколько способов восстановления изменений из stash:

  1. git stash apply: Применяет изменения из самого последнего stash (по умолчанию) или указанного stash (например, `git stash apply stash@{1}`). При этом изменения остаются в stash, как будто вы их просто скопировали. Если при применении stash возникают конфликты, вам нужно будет разрешить их вручную.
  2. git stash pop: То же самое, что и `git stash apply`, но после применения stash он удаляется из списка stash. Тоже может вызывать конфликты.
  3. git stash branch <branchname>: Создает новую ветку с именем <branchname>, применяет изменения из самого последнего stash и удаляет этот stash. Это полезно, если изменения в stash значительно отличаются от текущего состояния ветки, и вы хотите избежать конфликтов.
  4. git stash show -p stash@{n} | git apply: Показывает diff указанного stash (stash@{n}) и применяет его. Это позволяет применить stash без его удаления. Также позволяет просмотреть изменения перед применением.

Управление stash:

  • git stash list: Показывает список всех stash. Каждый stash имеет индекс (stash@{0}, stash@{1} и т.д.), где stash@{0} - самый последний stash.
  • git stash show stash@{n}: Показывает краткую информацию об изменениях в указанном stash.
  • git stash show -p stash@{n}: Показывает патч (diff) для указанного stash.
  • git stash drop stash@{n}: Удаляет указанный stash.
  • git stash clear: Удаляет все stash. Будьте осторожны с этой командой!

Пример:

  1. Вы внесли изменения в несколько файлов, но еще не готовы их фиксировать.
  2. Выполняете git stash. Ваш рабочий каталог чист.
  3. Вы переключаетесь на другую ветку, делаете pull, и т.д.
  4. Возвращаетесь к своей ветке.
  5. Выполняете git stash pop, чтобы восстановить свои изменения.

В заключение, git stash — мощный инструмент для управления локальными изменениями, позволяющий временно отложить их и вернуться к ним позже. Важно понимать различные способы восстановления изменений из stash и управления ими.

0