git stash відкладає незакомічені зміни й повертає робочий каталог до стану останнього коміту. Типова ситуація: ви посеред задачі, а треба терміново перемкнутися на іншу гілку й виправити помилку.
git stash push -m "half-done invoice export" # відкласти
git switch hotfix # працювати деінде
git switch feature/export
git stash pop # повернути зміни
Що потрапляє в stash за замовчуванням:
- зміни у відстежуваних файлах (і в індексі, і в робочому каталозі);
- нові невідстежувані файли - ні. Для них
-u(--include-untracked), для проігнорованих теж --a(--all).
git stash -u
Робота зі списком:
git stash list
# stash@{0}: On feature/export: half-done invoice export
# stash@{1}: WIP on main: 4f2a1c3 Fix typo
git stash show -p stash@{1} # що всередині
git stash drop stash@{1} # видалити
apply проти pop:
git stash apply |
git stash pop |
|
|---|---|---|
| застосовує зміни | так | так |
| видаляє запис зі списку | ні | так, якщо застосування пройшло без конфліктів |
applyзручний, коли ті самі зміни треба застосувати в кількох гілках;pop- звичайний випадок «відклав і повернув»;- при конфлікті
popзапис не видаляє - після розв'язання конфлікту його треба прибрати вручну черезgit stash drop.
Корисне:
git stash push -- app/Models/User.php- відкласти лише вказані файли;--staged- відкласти лише те, що в індексі;git stash branch new-branch- створити гілку від коміту, на якому зроблено stash, і застосувати зміни там. Рятує, коли stash не накладається на поточний код.
Не перетворюйте stash на сховище: записи без опису через тиждень неможливо зрозуміти. Довгу незавершену роботу краще закомітити в окрему гілку.