git stash
Определение
Команда 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@
Вы можете выбрать, какое именно сохранение применить, следующим образом:
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'?