Git Stash – краткий обзор

Git Stash – краткий обзор

Прерывания — довольно частое явление при работе над большим проектом. Для меня они даже обычны, когда я работаю в одиночку. Для меня эти прерывания часто имеют форму: Пожалуйста, переключись на работу над другой вещью. Что происходит, когда это происходит в тот момент, когда я еще не готов к фиксации? Git stash на помощь! Как видно из названия, git stash позволяет хранить изменения для последующего использования. После сохранения изменений дерево исходников возвращается в состояние последней фиксации. В этот момент я могу работать над другим набором необходимых изменений. Когда я буду готов вернуться к изменениям, которые я припрятал, я могу просто вытащить их из тайника с помощью git stash pop и продолжить работу.

TL;DR - Какие команды мне нужно знать для git stash?

  • git stash - Это сохранит ваши текущие изменения и очистит ваш рабочий каталог. Это то же самое, что и git stash push
  • git stash -m - То же самое, что и выше, но вместо ID коммита к тайнику прикрепляется сообщение.
  • git stash list - Показать список тайников для данного хранилища.
  • git stash apply - Применить изменения из тайника и оставить тайник в списке тайников.
  • git stash pop - То же, что и apply, но удалить тайник из списка.
  • git stash drop - Удалить тайник из списка.

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

Давайте посмотрим несколько примеров

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

Статус Git, показывающий одно внесенное изменение.

На следующем снимке экрана показано использование git stash без каких-либо аргументов. Вы увидите, что комментарий по умолчанию будет состоять из идентификатора фиксации и сообщения о фиксации.

команда git stash

Это результат git stash list, показывающий один тайник с его идентификатором тайника и комментарием по умолчанию.

Вывод списка git stash list, показывающий один тайник.

Если присутствует только сообщение о предыдущем коммите, оно не отражает фактических изменений, которые были сделаны и сохранены. Было бы лучше иметь сообщение, отражающее внесенные изменения и причину их сохранения. Здесь мы видим пример сохранения изменений с сообщением.

Статус Git, показывающий изменение и сохраняющий изменение с сообщением.

Теперь мы видим, что есть второй коммит и что он был перемещён в начало списка. Обратите внимание, что наш первоначальный коммит, который изначально был stash@{0}, теперь стал stash@{1}. Изменение, которое мы только что спрятали, заняло место в позиции 0.

Список тайников показывает два тайника.

Если бы вы запустили git stash pop, то получили бы изменения, которые мы только что зафиксировали. А что, если вы захотите начать работу над набором изменений, которые не находятся в начале списка? Это так же просто, как вызвать git stash pop . В данном случае я указал 1 в качестве идентификатора. Вы можете увидеть внизу вывода git, что он говорит, что сбросил ссылку на stash@{1}.

Git stash pop with a stash id

Выполнив git stash list, мы видим, что в списке осталось только одно изменение. Первоначальное изменение, которое мы спрятали, было удалено из списка с момента появления первого изменения.

Git stash list, показывающий только наше второе изменение

Здесь мы используем опцию push вместе с сообщением. В листинге показано, что оба изменения снова сохранены.

Запуск git stash с опцией push и сообщением
Список тайников показывает, что оба тайника все еще сохранены.

Теперь мы воспользуемся опцией apply, чтобы показать, что мы можем применить тайник, не удаляя его из списка тайников.

Использование git stash apply для применения определенного коммита без его удаления.
Список тайников показывает, что оба тайника все еще сохранены.

В заключение давайте покажем, что происходит, когда мы хотим удалить определенный тайник.

Использование git stash drop для удаления тайника
Список тайников Git показывает только один оставшийся тайник

Заключение

Git stash - это удобный способ сохранить набор изменений, над которыми вы работаете. Конечно, существуют и другие способы сохранения изменений (например, ветвление). Я обычно использую git stash, когда мне нужно объединить набор изменений из другой ветки и я не готов зафиксировать то, над чем работаю в данный момент.