В предыдущем вопросе Git Дэниел Бенами говорил о рабочем процессе в Git:
Я работал над мастером и передал кое-какие вещи, а затем решил, что хочу отложить эту работу. Я сделал резервную копию нескольких коммитов, а затем разветвился, прежде чем начал свою дерьмовую работу.
Он хотел восстановить свое рабочее состояние до предыдущего момента времени без потери текущих изменений. Все ответы по-разному вращались вокруг чего-то вроде
git branch -m master crap_work
git branch -m previous_master master
Как это по сравнению с git stash
? Я немного сбит с толку, пытаясь понять, какой здесь другой вариант использования, когда кажется, что все, git stash
что происходит, уже обрабатывается ветвлением ...
@ Jordi Bunster : Спасибо, это проясняет ситуацию. Я полагаю, что я бы рассмотрел «заначку» как легкую безымянную ветку. Таким образом, stash может делать все, что и ветвь, но с большим количеством слов. Ницца!
git stash list
названия ваших тайников.git stash show -u
чтобы показать разницу между тайником и рабочей копией.Когда вы восстанавливаете свой тайник, ваши изменения применяются повторно, и вы продолжаете работать над своим кодом.
Чтобы сохранить ваши текущие изменения
Вы также можете иметь более одного тайника. Тайник работает как стек. Каждый раз, когда вы сохраняете новый тайник, он кладется поверх стека.
Обратите внимание на
stash@{0}
часть? Это ваш идентификатор тайника. Он понадобится вам для восстановления позже. Сделаем это прямо сейчас. ID тайника меняется с каждым созданным вами тайником. stash @ {0} относится к последнему сделанному вами тайнику.Чтобы применить тайник
Вы можете заметить, что тайник все еще там после того, как вы его применили. Вы можете бросить его, если он вам больше не нужен.
Или, поскольку тайник действует как стек, вы можете извлечь последний сохраненный тайник:
Если вы хотите стереть все свои тайники, выполните команду 'clear':
Вполне возможно, что вы не так часто используете тайники. Если вы просто хотите быстро сохранить изменения, чтобы восстановить их позже, вы можете не указывать идентификатор тайника.
Не стесняйтесь экспериментировать с тайником, прежде чем использовать его для действительно важной работы.
У меня также есть более подробная версия этого размещена в моем блоге .
источник
Я всегда опасаюсь git stash. Если вы отложите несколько раз, все станет беспорядочно. git stash list отобразит нумерованный список созданных вами тайников с сообщениями, если вы их предоставили ... Но проблема заключается в том, что вы не можете очистить тайники, кроме как с помощью жесткой очистки git stash clear (которая удаляет их все) . Так что, если вы не всегда анально рассуждаете о своих тайниках (что-то вроде противоречит философии тайников), вы получите непонятную кучу тайников.
Единственный известный мне способ выяснить, какой из них - использовать gitk --all и определить тайники. По крайней мере, это позволяет вам увидеть, для какой фиксации был создан тайник, а также разницу всего, что включено в этот тайник.
Обратите внимание, что я использую git 1.5.4.3, и я думаю, что 1.6 добавляет git stash pop, который, я думаю, применит выбранный тайник и удалит его из списка. Что кажется намного чище.
На данный момент я всегда пытаюсь перейти на ветку, если не уверен, что вернусь к этому тайнику в тот же день, даже в течение часа.
источник
git stash drop [<stash>]
Если вы ищете рабочий процесс, который может быть более подходящим, чем git stash, вы можете посмотреть git-bottle . Это утилита, предназначенная для сохранения и восстановления различных рабочих состояний git при обычных фиксациях git, эффективно создавая моментальные снимки текущего и подходящего состояния вашего рабочего дерева и всех различных состояний файлов, отображаемых в разделе git status.
Ключевые отличия от
git stash
:git stash
сохраняет грязное состояние git узко (измененные файлы и добавленные файлы в индекс), тогдаgit-bottle
как предназначен для сохранения всего, что отличается отHEAD
, и различает сохраняющим образом измененные, измененные и не добавленные, не добавленные, неслитые пути, и полные состояния перебазирования / слияния (.gitignore
не сохраняются только пути ниже ).git stash
сохраняет, чтобы спрятать объекты, которые нужно отслеживать отдельно. Если бы я что-то спрятал 2 недели назад, я мог бы этого не вспомнить, тогда какgit-bottle
сохраняет как предварительные коммиты в текущую ветку . Обратное действиеgit-unbottle
эквивалентноgit stash
попу. Эти коммиты можно отправлять и публиковать в репозиториях. Это может быть полезно для удаленных сборок, когда у вас есть другой репозиторий на удаленном сервере только для сборки или для совместной работы с другими людьми по разрешению конфликтов.источник