May 16, 2021

Как сохранить временные наработки с Git без коммита

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

Для таких ситуация в Git предусмотрена команда -

git stash

Рассмотрим ее работу на практике. Пусть мы работаем с проектом, имеющим два коммита V1 и V2 (в каждом сохранен модуль с командой print('Vномер_версии')):

На очередном шаге содержимое модуля заменено на:print('V3').

Если вызвать команду git stash, то изменения будут сохранены в буфере памяти, а содержимое изменится в соответствии с предыдущим коммитом на print('V2'):

Теперь можно перейти в другое состояние и сделать необходимые действия. Например, откатимся к V1, добавим строку print('V11') и сохраним в буфере изменения. Теперь в стеке будет уже два временных состояния. Чтобы это посмотреть, можно вызвать команду

git stash list

Теперь вернемся к коммиту V2 и применим изменения из стека:

git stash apply stash@{1}

Файл вернется к виду:

Если бы мы попытались восстановить версию 0 из стека, получили бы конфликт, так как она сохранена из предыдущего коммита:

Также в этом случае понадобится скорректировать файл: