Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.53.0 no changes
-
2.52.0
2025-11-17
- 2.51.1 → 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.43.1 → 2.50.1 no changes
-
2.43.0
2023-11-20
- 2.42.1 → 2.42.4 no changes
-
2.42.0
2023-08-21
- 2.39.1 → 2.41.3 no changes
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 no changes
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 no changes
-
2.35.0
2022-01-24
- 2.32.1 → 2.34.8 no changes
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 no changes
-
2.31.0
2021-03-15
- 2.26.1 → 2.30.9 no changes
-
2.26.0
2020-03-22
- 2.24.1 → 2.25.5 no changes
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 no changes
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 no changes
-
2.22.0
2019-06-07
- 2.17.1 → 2.21.4 no changes
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
- 2.15.4 no changes
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
- 2.8.6 → 2.10.5 no changes
-
2.7.6
2017-07-30
- 2.1.4 → 2.6.7 no changes
-
2.0.5
2014-12-17
СИНОПСИС
gitstash'list[<log-options>]gitstash'show[-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>]gitstash'drop[-q|--quiet] [<stash>]gitstash'pop[--index] [-q|--quiet] [<stash>]gitstash'apply[--index] [-q|--quiet] [<stash>]gitstash'branch<branchname> [<stash>]gitstash'[push[-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [(-m|--message) <message>] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>…]]gitstash'save[-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]gitstashcleargitstashcreate[<message>]gitstashstore[(-m|--message) <message>] [-q|--quiet] <commit>gitstashexport(--to-ref<ref>) [<stash>…]gitstashimport<commit>
ОПИС
Використовуйте команду git stash, якщо ви хочете зберегти поточний стан робочої теки та індексу, але при цьому повернутися до чистої робочої теки. Ця команда зберігає ваші локальні зміни та відновлює робочу теку до стану, що відповідає коміту HEAD.
Зміни, збережені за допомогою цієї команди, можна переглянути за допомогою команди git stash list, перевірити за допомогою git stash show та відновити (можливо, поверх іншого коміту) за допомогою git stash apply. Виклик команди git stash без аргументів еквівалентний команді git stash push. Сховок зазвичай відображається як «WIP on “<branchname>” …», але ви можете вказати більш описове повідомлення в командному рядку під час його створення. (Примітка: WIP, Work In Progress).
Остання створена вами схованка зберігається в refs/stash; старіші схованки можна знайти в reflog цього посилання та позначати за допомогою звичайного синтаксису reflog (наприклад, stash@{0} — це найновіша схованка, stash@{1} — попередня, також можливий варіант stash@{2.hours.ago}). На схованки також можна посилатися, вказавши лише індекс схованки (наприклад, ціле число <n> еквівалентно stash@{<n>}).
КОМАНДИ
-
push[-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [(-m|--message) <message>] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>...] -
Збережіть ваші локальні зміни в новому «записі stash» та поверніть їх до
HEAD(у робочому дереві та в індексі). Частина <message> є необовʼязковою та містить опис разом зі станом stash.Щоб швидко створити знімок, можна опустити «push». У цьому режимі аргументи, що не є опціями, заборонені, щоб уникнути створення небажаного запису в stash через помилку в написанні субкоманди. Є два винятки з цього правила:
stash-p, що діє як псевдонім дляstashpush-p, та елементи шляху, які дозволяються після подвійного дефіса--для усунення неоднозначності. -
save[-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>] -
Цей параметр застарів на користь git stash push. Він відрізняється від «stash push» тим, що не може приймати pathspec. Натомість усі аргументи, що не є параметрами, обʼєднуються для формування повідомлення stash.
-
list[<log-options>] -
Перелічити записи сховку, які у вас є на даний момент. Кожен «запис сховку» вказано разом із його назвою (наприклад,
stash@{0}— це найновіший запис,stash@{1}— попередній тощо), назвою гілки, яка була активною на момент створення запису, та коротким описом коміту, на якому базується цей запис.stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation stash@{1}: On master: 9cc0589... Add git-stashКоманда використовує опції, що застосовуються до команди git log, щоб контролювати, що і як відображається. Див. git-log[1].
-
show[-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>] -
Показати зміни, збережені в записі stash, у вигляді порівняння між вмістом сховку та комітом, який був на момент створення цього запису. Зазвичай команда показує diffstat, але вона підтримує будь-який формат, відомий команді git diff (наприклад,
gitstashshow-pstash@{1}для перегляду другого за датою запису у вигляді латки). Якщо не вказано <diff-option>, стандартна поведінка буде визначатися змінними конфігураціїstash.showStatтаstash.showPatch. Ви також можете використовуватиstash.showIncludeUntracked, щоб встановити, чи--include-untrackedстандартно ввімкнено. -
pop[--index] [-q|--quiet] [<stash>] -
Видалити один стан зі списку сховків та застосувати його поверх поточного стану робочого дерева, тобто виконати операцію, зворотну до
gitstashpush. Робоча тека має збігатись з індексом.Застосування стану може завершитися невдачею через конфлікти; у цьому випадку він не видаляється зі списку відкладених змін. Вам потрібно вручну розвʼязати конфлікти, а потім вручну виконати команду
gitstashdrop. -
apply[--index] [-q|--quiet] [<stash>] -
Як і
pop, але не видаляти стан зі списку stash. На відміну відpop, <stash> може бути будь-яким комітом, який виглядає як коміт, створений за допомогоюstashpushабоstashcreate. -
branch<branchname> [<stash>] -
Створює та переходить на нову гілку з іменем <branchname>, починаючи з коміту, в якому <stash> було спочатку створено, застосовує зміни, записані в <stash>, до нового робочого дерева та індексу. Якщо це вдається, і <stash> є посиланням у формі
stash@{<ревізія>}, то <stash> видаляється.Це корисно, якщо гілка, на якій ви виконали
gitstashpush, змінилася настільки, щоgitstashapplyне вдається виконати через конфлікти. Оскільки запис stash застосовується поверх коміту, який був HEAD на момент запускуgitstash, він відновлює початковий стан stash без конфліктів. -
clear -
Видалить усі записи зі сховку. Зверніть увагу, що ці записи потім будуть видалені, і їх може бути неможливо відновити (див. «ПРИКЛАДИ» нижче для можливої стратегії).
-
drop[-q|--quiet] [<stash>] -
Видалити один запис stash зі списку записів stash.
-
create -
Створення запису сховку (який є звичайним об’єктом коміту) та повернення імені цього об’єкта без збереження його в просторі імен ref. Ця функція призначена для використання у скриптах. Ймовірно, це не та команда, яку ви хочете використовувати; див. «push» вище.
-
store -
Зберегти заданий stash, створений за допомогою git stash create (що є завислим комітом злиття), у stash ref, оновлюючи stash reflog. Це призначено для використання скриптами. Ймовірно, це не та команда, яку ви хочете використовувати; див. "push" вище.
-
export(--print|--to-ref<ref> ) [<stash>...] -
Експортувати зазначені сховки, або всі, якщо жодного не вказано, до ланцюжка комітів, які можна передати за допомогою звичайних механізмів fetch та push, а потім імпортувати за допомогою субкоманди
import. -
import<commit> -
Імпорт вказаних сховків з вказаного коміту, який мав бути створений за допомогою
export, та додавання їх до списку сховків. Щоб замінити наявні сховки, спочатку скористайтесяclear.
ОПЦІЇ
-
-a -
--all -
Ця опція дійсна лише для команд
pushтаsave.Усі проігноровані та невідстежувані файли також зберігаються у сховку, а потім видаляються за допомогою команди
gitclean. -
-u -
--include-untracked -
--no-include-untracked -
При використанні з командами
pushтаsave, усі невідстежувані файли також зберігаються, а потім очищаються за допомогоюgitclean.При використанні з командою
show, відображати невідстежувані файли у записі stash як частину різниці. -
--only-untracked -
Ця опція дійсна лише для команди
show.Показувати лише невідстежувані файли у записі stash як частину різниці.
-
--index -
Цей параметр дійсний лише для команд
popтаapply.Намагатись відновити не лише зміни робочого дерева, а й зміни індексу. Однак це може не спрацювати, якщо виникають конфлікти (які зберігаються в індексі, через що ви більше не зможете застосувати зміни так, як вони були спочатку).
-
-k -
--keep-index -
--no-keep-index -
Ця опція дійсна лише для команд
pushтаsave.Усі зміни, що вже додані до індексу, залишаються незмінними.
-
-p -
--patch -
Ця опція дійсна лише для команд
pushтаsave.Інтерактивно вибирайте фрагменти з різниці між HEAD та робочим деревом для зберігання. Запис stash побудовано таким чином, що його індексний стан збігається зі станом індексу вашого репозиторію, а його робоче дерево містить лише зміни, вибрані вами інтерактивно. Потім вибрані зміни скасовуються з вашого робочого дерева. Дивіться розділ «Інтерактивний режим» у git-add[1], щоб дізнатися, як керувати режимом
--patch.Опція
--patchмає на увазі--keep-index. Ви можете скористатися--no-keep-index, щоб перевизначити це. -
-U<n> -
--unified=<n> -
Створює файли відмінностей (diff) з <n> рядками контексту. Стандартно використовується
diff.contextабо 3, якщо параметр конфігурації не встановлено. -
--inter-hunk-context=<n> -
Показує контекст між фрагментами відмінностей (diff hunks), до вказаної <кількості> рядків, таким чином обʼєднуючи фрагменти, що знаходяться близько один до одного. Стандартно використовується значення
diff.interHunkContextабо 0, якщо параметр конфігурації не встановлено.
-
-S -
--staged -
Ця опція дійсна лише для команд
pushтаsave.Зберігає лише ті зміни, які зараз перебувають в індексі. Це схоже на базовий
gitcommit, за винятком того, що стан зберігається у сховищі, а не в поточній гілці.Опція
--patchмає пріоритет над цією. -
--pathspec-from-file=<файл> -
Ця опція дійсна лише для команди
push.Специфікатор шляху передається у <файл> замість аргументів командного рядка. Якщо <файл> дорівнює
-, то використовується стандартний ввід. Елементи специфікатора шляху розділяються символами LF або CR/LF. Елементи специфікатора шляху можна брати в лапки, як пояснено для змінної конфігураціїcore.quotePath(див. git-config[1]). Див. також--pathspec-file-nulта глобальну змінну--literal-pathspecs. -
--pathspec-file-nul -
Ця опція дійсна лише для команди
push.Має значення лише з
--pathspec-from-file. Елементи специфікатора шляху розділяються символом NUL, а всі інші символи (включно з символами нового рядка та лапками) сприймаються буквально. -
-q -
--quiet -
Ця опція дійсна лише для команд
apply,drop,pop,push,save,store.Тихий режим, повідомлення відгуку придушуються.
-
--print -
Цей параметр дійсний лише для команди
export.Створює ланцюжок комітів, що представляють експортовані сховки, без їх збереження в просторі імен ref, та виводить ідентифікатор обʼєкта у стандартний вивід. Це створено для скриптів.
-
--to-ref -
Цей параметр дійсний лише для команди
export.Створює ланцюжок комітів, що представляють експортовані сховки, та зберігає його у вказаному посиланні.
-
-- -
Ця опція дійсна лише для команди
push.Відокремлює специфікатор шляху від опцій для усунення неоднозначності.
- <pathspec>...
-
Ця опція дійсна лише для команди
push.Новий елемент stash записує змінені стани лише для файлів, які відповідають специфікатору шляху. Записи індексу та файли робочого дерева потім повертаються до стану, зазначеного в HEAD лише для цих файлів, залишаючи файли, які не відповідають специфікатору шляху, без змін.
Для отримання додаткової інформації див. елемент «pathspec» у gitglossary[7].
- <stash>
-
Цей параметр дійсний лише для команд
apply,branch,drop,pop,showтаexport.Посилання у форматі
stash@{<версія>}. Якщо <stash> не вказано, передбачається, що це найновіший stash (тобтоstash@{0}).
ОБГОВОРЕННЯ
Запис stash представлений як коміт, дерево якого записує стан робочої теки, а його перший батько — це коміт з HEAD на момент створення запису. Дерево другого батька записує стан індексу на момент створення запису та стає дочірнім для коміту HEAD. Граф предків виглядає так:
.----W
/ /
-----H----I
де H — це коміт HEAD, I — це коміт, який записує стан індексу, а `W — це коміт, який записує стан робочого дерева.
ПРИКЛАДИ
- Втягування у дерево зі змінами
-
Коли ви працюєте над чимось, ви дізнаєтеся, що в основному репозиторії відбулися зміни, які, можливо, мають стосунок до вашої роботи. Якщо ваші локальні зміни не суперечать змінам в основному репозиторії, проста команда
gitpullдозволить вам продовжити роботу.Однак трапляються випадки, коли ваші локальні зміни суперечать змінам з основного репозиторію, і команда
gitpullвідмовляється перезаписувати ваші зміни. У такому випадку ви можете приховати свої зміни, виконати pull, а потім відновити їх, як показано нижче:$ git pull ... Файл foobar не оновлений, об'єднання неможливе. $ git stash $ git pull $ git stash pop
- Перерваний робочий процес
-
Коли ви перебуваєте в процесі роботи, до вас заходить керівник і вимагає негайно щось виправити. Зазвичай ви б зробили коміт у тимчасову гілку, щоб зберегти свої зміни, а потім повернулися до початкової гілки, щоб виконати термінове виправлення, наприклад так:
# ... відповідь на головне питання про життя, Всесвіт і все інше ... $ git switch -c my_wip $ git commit -a -m "WIP" $ git switch master $ edit emergency fix $ git commit -a -m "Fix in a hurry" $ git switch my_wip $ git reset --soft HEAD^ # ... продовжуємо розмірковувати ...
Ви можете скористатися git stash для спрощення вищезазначеного, ось так:
# ... відповідь на головне питання про життя, Всесвіт і все інше... $ git stash $ edit emergency fix $ git commit -a -m "Fix in a hurry" $ git stash pop # ... продовжуємо розмірковувати ...
- Тестування часткових комітів
-
Ви можете використовувати
gitstashpush--keep-index, коли хочете зробити два або більше комітів зі змін у робочому дереві, і хочете перевірити кожну зміну перед комітом:# ... відповідь на головне питання про життя, Всесвіт і все інше ... $ git add --patch foo # додати лише першу частину до індексу $ git stash push --keep-index # зберегти всі інші зміни до сховку $ edit/build/test first part $ git commit -m 'First part' # зафіксувати повністю перевірені зміни $ git stash pop # підготуватися до роботи над усіма іншими змінами # ... повторюйте вищезазначені пʼять кроків, поки не залишиться один коміт ... $ edit/build/test remaining parts $ git commit foo -m 'Remaining parts'
- Збереження непов’язаних змін для подальшого використання
-
Коли ви перебуваєте посеред масштабних змін і знаходите якусь неповʼязану проблему, яку не хочете забути виправити, ви можете внести зміни, проіндексувати їх та використати
gitstashpush--staged, щоб зберегти їх для подальшого використання. Це схоже на коміт проіндексованих змін, тільки коміт потрапляє до сховку, а не до поточної гілки.# ... відповідь на головне питання про життя, Всесвіт і все інше... $ git add --patch foo # додати неповʼязані зміни до індексу $ git stash push --staged # зберегти ці зміни у сховищі # ... відповідь на головне питання про життя, Всесвіт і все інше, плюс завершити поточні зміни ... $ git commit -m 'Massive' # зафіксувати повністю перевірені зміни $ git switch fixup-branch # перейти до іншої гілки $ git stash pop # завершити роботу над збереженими змінами
- Відновлення записів зі сховку, які були помилково скинуті/видалені
-
Якщо ви помилково видалите або очистите записи зі сховку, їх не можна буде відновити за допомогою звичайних механізмів безпеки. Однак, ви можете спробувати наступне, щоб отримати список елементів зі сховку, які все ще знаходяться у вашому репозиторії, але більше недоступні:
git fsck --unreachable | grep commit | cut -d\ -f3 | xargs git log --merges --no-walk --grep=WIP
КОНФІГУРАЦІЯ
Все, що знаходиться нижче цього рядка в цьому розділі, вибірково включено з документації git-config[1]. Вміст такий самий, як і там:
-
stash.index -
Якщо для цього параметра встановлено значення true, команди
gitstashapplyтаgitstashpopпрацюватимуть так, ніби було вказано параметр--index. Стандартне значення — false. -
stash.showIncludeUntracked -
Якщо для цього параметра встановлено значення true, команда
gitstashshowпокаже файли, що не відстежуються, в елементі сховища. Стандартне значення — false. -
stash.showPatch -
Якщо для цього параметра встановлено значення true, команда
gitstashshowбез додаткових опцій відображатиме запис про тимчасове збереження у вигляді латки. Стандартне значення — false. -
stash.showStat -
Якщо для цього параметра встановлено значення true, команда
gitstashshowбез додаткових опцій відображатиме diffstat запису в сховку. Стандартне значення — true.
GIT
Частина набору git[1]