git stash
On this page you will find useful information about git stash command and how to stash your work, as well as learn about multiple and partial stashes.
Определение
Команда git stash временно сохраняет изменения, внесённые в рабочую копию, чтобы вы могли заняться другой задачей, а затем вернуться и снова применить эти изменения.

Сохранение изменений
Команда git stash сохраняет как подготовленные (staged), так и неподготовленные (unstaged) изменения, сохраняет их для последующего использования, а затем удаляет из рабочей копии. Сначала выполните git status, чтобы увидеть текущее состояние файлов. Затем выполните git stash, чтобы сохранить изменения:
Git stash
git statusOn branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.htmlGit stash
$ git stashSaved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepageGit stash
$ git statusOn branch master
nothing to commit, working tree cleanПовторное применение сохранённых изменений
Команда git stash pop удаляет изменения из очереди сохранений и повторно применяет их к рабочей копии.
Альтернативный способ — выполнить git stash apply, если вы хотите повторно применить изменения, но сохранить их в очереди сохранений:
Git stash
git statusOn branch master
nothing to commit, working tree cleanGit stash
git stash popOn branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
Dropped refs/stash@{0} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)Сохранение неотслеживаемых или игнорируемых файлов
Команда git stash сохраняет изменения, добавленные в индекс (подготовленные изменения), и изменения в файлах, которые уже отслеживаются Git (неподготовленные изменения). Она не будет сохранять новые файлы в рабочей копии, которые ещё не были подготовлены, а также игнорируемые файлы. В таких случаях поможет опция git stash -u (или --include-untracked), которая позволяет сохранить неотслеживаемые файлы.
Git stash
git stash -uВы также можете сохранить изменения в игнорируемых файлах, используя опцию -a (или --all) при выполнении git stash.
Git stash
git stash -aНесколько сохранений
Вы можете выполнить git stash несколько раз, чтобы создать несколько сохранений, а затем выполнить git stash list, чтобы просмотреть их. По умолчанию сохранения помечаются как «WIP» (work in progress — работа в процессе). Они создаются поверх текущей ветки и коммитов, с которых было выполнено сохранение.
Git stash
git stash liststash@{0}: WIP on master: 5002d47 our new homepage
stash@{1}: WIP on master: 5002d47 our new homepage
stash@{2}: WIP on master: 5002d47 our new homepageРекомендуется добавлять пояснение с помощью git stash push -m "сообщение"
По умолчанию git stash pop повторно применит последнее созданное сохранение: stash@0
Вы можете выбрать, какое именно сохранение применить, следующим образом:
Git stash
git stash pop stash@{3}Switched to a new branch 'add-stylesheet'
On branch add-stylesheet
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
Dropped refs/stash@{1} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)Просмотр разницы сохранений
Используйте git stash show, чтобы просмотреть краткую сводку сохранённых изменений:
Git stash
git stash showindex.html | 1 +
style.css | 3 +++
2 files changed, 4 insertions(+)Вы также можете использовать опции -p или --patch, чтобы увидеть полную разницу (diff) для сохранения:
Git stash
git stash show -pdiff --git a/style.css b/style.css
new file mode 100644
index 0000000..d92368b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,3 @@
+* {
+ text-decoration: blink;
+}
diff --git a/index.html b/index.html
index 9daeafb..ebdcbd2 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
+<link rel="stylesheet" href="style.css"/>Частичное сохранение
Git позволяет выбрать, хотите ли вы сохранить только один файл, несколько файлов или отдельные изменения внутри файлов. Команда git stash -p проходит по каждому «хунку» (hunk — фрагменту изменений в Git) в рабочей копии и спрашивает, хотите ли вы сохранить его:
Git stash
git stash -pdiff --git a/style.css b/style.css
new file mode 100644
index 0000000..d92368b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,3 @@
+* {
+ text-decoration: blink;
+}
Stash this hunk [y,n,q,a,d,/,e,?]? y
diff --git a/index.html b/index.html
index 9daeafb..ebdcbd2 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
+<link rel="stylesheet" href="style.css"/>
Stash this hunk [y,n,q,a,d,/,e,?]? nКоманды для работы с хунками
| Command | Description |
|---|---|
| / | Поиск хунка по регулярному выражению. |
| ? | Вывод справки. |
| n | Не сохранять хунк. |
| a | Сохранить этот хунк и все последующие хунки в файле. |
| d | Не сохранять этот хунк и любые последующие хунки в файле. |
| e | Вручную отредактировать текущий хунк |
| q | Выйти (выбранные хунки будут сохранены) |
| s | Разделить хунк на более мелкие части. |
| y | Сохранить хунк. |
Создание ветки из сохранения
Вы можете создать новую ветку для применения сохранённых изменений с помощью git stash branch:
Git stash
git stash branch add-stylesheet stash@{1}Switched to a new branch 'add-stylesheet'
On branch add-stylesheet
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
Dropped refs/stash@{1} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)Очистка очереди сохранений
Вы можете удалить сохранение с помощью git stash drop:
Git stash
git stash drop stash@{1}Dropped stash@{1} (17e2697fd8251df6163117cb3d58c1f62a5e7cdb)Если вы выполните git stash clear, будут удалены все сохранения:
Git stash
git stash clearPractice
Какие возможности и функции есть у команды 'git stash'?