Під час роботи з декількома гілками в Git дуже легко заплутатись і внести зміни не на ту гілку. Або інша ситуація: ви працюєте над певною фічею, та ще не готові закомітити свої зміни, а хтось просить вас екстрено пофіксити баг — і вам треба перейти на іншу гілку. Тут на допомогу приходить команда git stash
.
Створення та застосування stash
З командою stash
ви можете зберегти копію незакомічених змін на поточній робочій гілці.
В найпростішому варіанті команда git stash
створює stash entry
. Щоб застосувати збережені зміни пізніше, ми можемо використати git stash apply
.
Створюємо stash
:
git stash
Застосовуємо збережені зміни для поточної робочої гілки:
git stash apply
Ми можемо застосувати створений stash entry
до різних гілок — це не обов'язково повинна бути гілка, з якої ми створили stash
.
stash
для невідстежуваних файлів
Автоматично git stash
застосовується лише до відстежуваних файлів. Якщо ви хочете створити чи застосувати stash
також і до невідстежуваних файлів (або до файлів з вашого .gitignore
), ви можете додати до команди прапор -u
(або --include-untracked
)
Тобто, щоб створити stash
з невідстежуваними файлами:
git stash -u
А щоб застосувати ці зміни:
git apply -u
Створення декількох stash
git stash apply
застосує зміни з останнього stash
на вашій робочій гілці. Але також можна зберігати декілька stash
одночасно, а застосовувати їх по черзі. Щоб вивести список всіх створених stash
, використайте команду git stash list
. Тоді отримаєте щось подібне:
git stash list
stash@{0}: WIP on my-branch: ca96af0 Commit message 3
stash@{1}: WIP on my-branch: 03af20c Commit message 2
stash@{2}: WIP on my-branch: 216b662 Commit message 1
Ваші stash
матимуть стандартну назву WIP (Work in Progress)
, далі вказується назва гілки та дані коміту, з якого був створений stash
. Проте така інформація не дуже допоможе нам, якщо у нас багато збережених stash
— складно зрозуміти, які саме зміни ми будемо застосовувати. Натомість ми можемо додати до нашого stash
власне повідомлення з більш детальною інформацією про зміни:
git stash save 'my brand new stash'
Тепер той самий перелік stash
матиме такий вигляд:
git stash list
stash@{0}: On my-branch: my brand new stash
stash@{1}: WIP on my-branch: ca96af0 Commit message 3
stash@{2}: WIP on my-branch: 03af20c Commit message 2
stash@{3}: WIP on my-branch: 216b662 Commit message 1
Щоб застосувати певний stash
з нашого списку, ми можемо посилатися на нього в команді apply
:
git stash apply stash@{2}
(замініть останню частину на посилання потрібного stash
)
Наступні stash
додаються на початок списку. Останній stash
матиме посилання stash@{0}
.
Список може містити також stash
з різних гілок, які можна застосувати до будь-яких гілок вашого проєкту.
Застосування та видалення stash
Коли ви використовуєте команду apply stash
, копія stash
зберігається у списку — тому ми можемо застосувати один stash
до декількох гілок. Якщо виконати git stash list
після застосування stash apply
, ми все ще побачимо його у списку.
Виводимо усі збережені stash
:
git stash list
Якщо нам треба видалити stash
зі списку після його застосування, використовуйте pop
замість apply
:
git stash pop
pop
відрізняється від apply
тим, що або видаляє останній stash
сам, або певний stash
, якщо ми вказали посилання :
git pop stash@{2}
Команда pop
— вдалий вибір, якщо ви не збираєтесь застосовувати збережені зміни на інших гілках, до того ж не хочете забруднювати список stash
.
Створення нової гілки та одночасне застосування stash
Команда branch
дозволяє створити нову гілку та застосувати до неї останній stash
:
git stash branch
Наведена команда — лише скорочена версія цих команд:
git checkout -b my-new-branch
git stash apply
Ми так само можемо тут посилатися на певний stash
наприкінці команди:
git stash branch stash@{2}
Як видалити або очистити stash
Варто видаляти непотрібні stash
, аби вони не забруднювали список. Особливо важливо пам'ятати про це, коли перемикаєтесь між декількома гілками, адже набагато простіше вибрати потрібний stash
, коли у списку їх декілька, а не 1000. До того ж часто, коли зміни вже закомічені, stash
нам більше не потрібен.
Окремі stash
можна видалити зі списку командою git stash drop
. Як і у випадку з pop
та apply
, команда сама застосується до останнього stash
. Щоб виконати команду для іншого stash
, використайте відповідне посилання:
git stash drop stash@{2}
Якщо вам потрібно очистити усі ваші stash
, виконайте команду:
git stash clear
Коментарі (1)