Вы также можете выполнить git stash pop, чтобы применить спрятанные изменения и тут же удалить их из хранилища.
Продуктивное прибережение
У откладываемых изменений есть несколько дополнительных вариантов использования, которые также могут быть полезны. Первый – это использование довольно популярной опции --keep-index с командой stash save. Она просит Git не прятать то, что вы уже добавили в индекс командой git add.
Это может быть полезно в случае, когда вы сделали какие-то изменения, но хотите зафиксировать только часть из них, а к оставшимся вернуться через некоторое время.
$git status -s
M index.html
M lib/simplegit.rb
$git stash --keep-index
Saved working directory and index state WIP on master: 1b65b17 added the index file
HEAD is now at 1b65b17 added the index file
$git status -s
M index.html
Другой распространенный вариант, который вы, возможно, захотите использовать – это спрятать помимо отслеживаемых файлов также и неотслеживаемые. По умолчанию git stash будет сохранять только файлы, которые уже добавлены в индекс. Если вы укажете --include-untracked или -u, Git также спрячет все неотслеживаемые файлы, которые вы создали.
$git status -s
M index.html
M lib/simplegit.rb
?? new-file.txt
$git stash -u
Saved working directory and index state WIP on master: 1b65b17 added the index file
HEAD is now at 1b65b17 added the index file
$git status -s
$
И наконец, если вы укажете флаг --patch, Git не будет ничего прятать, а вместо этого в интерактивном режим спросит вас о том, какие из изменений вы хотите спрятать, а какие оставить в вашей рабочей директории.
$git stash --patch
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index 66d332e..8bb5674 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -16,6 +16,10 @@ class SimpleGit
return `#{git_cmd} 2>&1`.chomp
end
end
+
+ def show(treeish = 'master')
+ command("git show #{treeish}")
+ end
end
test
Stash this hunk [y,n,q,a,d,/,e,?]? y
Saved working directory and index state WIP on master: 1b65b17 added the index file
Создание ветки из спрятанных изменений
Если вы спрятали некоторые изменения, оставили их на время, а сами продолжили работать в той же ветке, у вас могут возникнуть проблемы с восстановлением наработок. Если восстановление будет затрагивать файл, который уже был изменен с момента сохранения наработок, то вы получите конфликт слияния и должны будете попытаться разрешить его. Если вам нужен более простой способ снова протестировать спрятанные изменения, вы можете выполнить команду git stash branch, которая создаст для вас новую ветку, перейдёт на коммит, на котором вы были, когда прятали свои наработки, применит на нём эти наработки и затем, если они применились успешно, удалит эти спрятанные изменения:
$git stash branch testchanges
Switched to a new branch "testchanges"
#On branch testchanges
#Changes to be committed:
#(use "git reset HEAD ..." to unstage)
#
#modified: index.html
#
#Changed but not updated:
#(use "git add ..." to update what will be committed)
#
#modified: lib/simplegit.rb
#
Dropped refs/stash@{0} (f0dfc4d5dc332d1cee34a634182e168c4efc3359)
Это удобное сокращение для того, чтобы легко восстановить спрятанные изменения и поработать над ними в новой ветке.
Очистка вашей рабочей директории
Наконец, у вас может возникнуть желание не прятать некоторые из изменений или файлов в вашей рабочей директории, а просто избавиться от них. Команда git clean сделает это для вас.
Одной из распространенных причин для этого может быть удаление мусора, который был сгенерирован при слиянии или внешними утилитами, или удаление артефактов сборки в процессе ее очистки.
Вам нужно быть очень аккуратными с этой командой, так как она предназначена для удаления неотслеживаемых файлов из вашей рабочей директории. Даже если вы передумаете, очень часто нельзя восстановить содержимое таких файлов. Более безопасным вариантом является использование команды git stash --all для удаления всего, но с сохранением этого в виде спрятанных изменений.
Предположим, вы хотите удалить мусор и очистить вашу рабочую директорию; вы можете сделать это с помощью git clean. Для удаления всех неотслеживаемых файлов в вашей рабочей директории, вы можете выполнить команду git clean -f -d, которая удалит все файлы и также все директории, которые в результате станут пустыми. Опция -f значит force или другими словами “действительно выполнить это”.
Если вы хотите только посмотреть, что будет сделано, вы можете запустить команду с опцией -n, которая означает “имитируй работу команды и скажи мне, что ты будешь удалять”.
$git clean -d -n
Читать дальше