git stash help |
![]() |
Добавил(а) microsin |
Команда git stash временно "припрятывает" ваши текущие наработки в проекте, чтобы можно было перейти на другую ветку репозитория, и впоследствии ввернуться к незаконченным наработкам. SYNOPSIS git stash list [< log-options>] ОПИСАНИЕ Используйте git stash, когда хотите записать текущее состояние рабочей директории и индекс, но хотите сделать откат в чистое состояние рабочей директории проекта. Эта команда сохранит ваши локальные изменения, и вернет состояние рабочей директории, соответствующее головной фиксации (HEAD commit). Изменения, сохраненные этой командой, можно посмотреть в списке git stash list, также они могут быть проинспектированы командой git stash show, и восстановлены (потенциально на вершину другой фиксации) командой git stash apply. Вызов git stash без каких-либо аргументов эквивалентен команде git stash push. Сохранение stash по умолчанию перечисляется как "WIP on branchname ...", но вы можете дать ему более подходящее описательное сообщение в командной строке, когда создаете stash. Последний созданный вами stash сохраняется в refs/stash; более старые stash находятся в reflog этой ссылки, и могут именоваться обычным синтаксисом reflog (т. е. stash@{0} это самый свежий созданный stash, stash@{1} это созданный перед ним, также возможен stash@{2.hours.ago}). К сохранениям stash можно также обращаться просто по stash-индексу (т. е. целое число n эквивалентно stash@{n}). КОМАНДЫ push [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [-m|--message < message>] [--pathspec-from-file=< file> Сохранит ваши локальные изменения в новое сохранение stash и выполнит откат к HEAD (с рабочее дерево и индекс). Здесь часть команды < message> опциональна, и дает описание вместе с сохраненным состоянием. Чтобы быстро создать snapshot, можно просто опустить "push". В этом режиме не допускаются аргументы без опций, чтобы не позволить ввести неправильную команду и создать нежелательный stash. Для этого существуют два исключения: stash -p, который действует как псевдоним stash push -p, и элементы pathspec, которые дозволяется указывать после двойной черты -- для разрешения неоднозначности. save [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [< message>] Эта опция устарела, её заменила git stash push. Она отличается от "stash push" в том, что не может принимать pathspec. Вместо этого все аргументы, не относящиеся к опциям, соединяются друг с другом, формируя stash-сообщение. list [< log-options>] Выведет список сохранений stash, которые сейчас имеются. Каждое сохранение stash в списке выводится с его именем (например stash@{0} для последнего сохранения, stash@{1} для предыдущего сохранения, и т. д.), именем ветви, которая была текущей в момент создания stash, и коротким описанием фиксации, на котором было создано сохранение stash. stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation Эта команда принимает опции, применимые к команде git log, чтобы управлять тем, что показывать и как. См. git-log(1) [3]. show [-u|--include-untracked|--only-untracked] [< diff-options>] [< stash>] Покажет изменения, записанные в stash-сохранении как diff между содержимым stash и фиксацией, поверх которой stash был создан первый раз. По умолчанию команда покажет diffstat, но она примет любой формат, известный для git diff (т. е. git stash show -p stash@{1} покажет второе по свежести сохранение в форме patch). Если не предоставлено < diff-option>, то поведение по умолчанию будет задаваться переменными конфигурации stash.showStat и stash.showPatch. Также вы можете использовать stash.showIncludeUntracked для установки, разрешено ли по умолчанию --include-untracked. pop [--index] [-q|--quiet] [< stash>] Удаляет одно stash-сохранения из stash-списка и применяет его на текущее состояние рабочего дерева, т. е. эта команда дает инверсию операции git stash push. Рабочая директория должна соответствовать индексу. Применение состояния может завершиться неудачей из-за конфликтов; в этом случае stash-сохранение не будет удалено из stash-списка. Вам нужно будет разрешить конфликты вручную, и затем вызвать git stash drop. apply [--index] [-q|--quiet] [< stash>] Работает наподобие но не удалит состояние из stash-списка. В отличие от pop, < stash> может быть любой фиксацией, которая выглядит как фиксация, созданная через stash push или stash create. branch < branchname> [< stash>] Создает и делает checkout новой ветки с именем < branchname>, начинающейся с фиксации, на которой изначально был создан < stash>, и применяет изменения, записанные < stash>, к новому рабочему дереву и индексу. Если команда завершилась успешно, и < stash> это ссылка в форме stash@{< revision>}, то < stash> выбрасывается. Это полезно, если ветка, на которой вы запустили git stash push, изменена настолько, что команда git stash apply завершается неудачей из-за конфликтов. Поскольку stash-сохранение применено поверх фиксации, которая была HEAD в момент, когда была запущена команда git stash, это действие восстановит оригинальное stash-состояние без конфликтов. clear Удалит все stash-сохранения. Имейте в виду, что эти сохранения будут затем объектом очистки репозитория (pruning), в возможно их нельзя будет восстановить (см. далее ПРИМЕРЫ для возможной стратегии). drop [-q|--quiet] [< stash>] Удалит одно stash-сохранение из списка stash. create Создаст элемент stash (который представляет собой обычный объект фиксации), и возвратит его имя объекта, без сохранения его где-либо в ref namespace. Это сделано для использования в скриптах. Вероятно это не та команда, которую бы вы хотели использовать; см. выше "push". store Сохранит указанный stash, созданный командой git stash create (который является подвешенным merge commit) в stash ref, с обновлением stash reflog. Это сделано для использования в скриптах. Вероятно это не та команда, которую бы вы хотели использовать; см. выше "push". ОПЦИИ -a, --all Эта опция допустима только для команд push и save. Все проигнорированные и не отслеживаемые файлы также попадут в stash и затем очистятся командой git clean [5]. -u, --include-untracked, --no-include-untracked При использовании с командами push и save все не отслеживаемые файлы также попадут в stash и затем очистятся командой git clean [5]. При использовании с командой show покажет не отслеживаемые файлы в stash-сохранении как часть diff. --only-untracked Эта опция допустима только для команды show. Покажет только не отслеживаемые файлы в stash-сохранении как часть diff. --index Эта опция допустима только для команд pop и apply. Пытается восстановить не только изменения рабочего дерева, но и изменения индекса. Однако это может завершиться неудачей, когда у вас есть конфликты (которые хранятся в индексе, где вы больше не можете применять изменения, как они были изначально). -k, --keep-index, --no-keep-index Эта опция допустима только для команд push и save. Все изменения, уже добавленные в индекс, остаются нетронутыми. -p, --patch Эта опция допустима только для команд push и save. Интерактивно выберите звенья из различий между HEAD и рабочим деревом, которое будет сохранено stash. Элемент stash построен таким образом, что его состояние индекса совпадает с состоянием индекса вашего репозитория, а его рабочее дерево содержит только изменения, выбранные вами в интерактивном режиме. Затем выполняется откат выбранных изменений из рабочей области. См. раздел "Interactive Mode" в git-add (1), чтобы узнать, как работать в режиме --patch. Опция --patch подразумевает --keep-index. Вы можете использовать --no-keep-index, чтобы это отменить. --pathspec-from-file=< file> Эта опция допустима только для команды push. Вместо аргументов командной строки передаются pathspec в < file>. Если < file> точно -, то используется стандартный ввод. Элементы pathspec отделяются друг от друга LF или CR/LF. Элементы pathspec могут быть заключены в двойные кавычки, как было объяснено для переменной конфигурации core.quotePath (см. git-config(1)). См. также --pathspec-file-nul и global --literal-pathspecs. --pathspec-file-nul Эта опция допустима только для команды push. Имеет смысл только с --pathspec-from-file. Элементы pathspec разделяются символом NUL, и все другие символы берутся литерально (включая символы новых строк и двойные кавычки). -q, --quiet Эта опция допустима только для команд apply, drop, pop, push, save, store. Подавляет любые сообщения обратной связи. -- Эта опция допустима только для команды push. Отделяет pathspec от опций с целью разрешения неоднозначности. < pathspec>... Эта опция допустима только для команды push. Новый элемент stash запишет измененные состояния только для файлов, которые соответствуют pathspec. Элементы индекса и файлы рабочего дерева откатываются обратно к состоянию HEAD также только для этих файлов, оставляя неизменными файлы, которые не соответствуют pathspec. Для дополнительной информации см. элемент pathspec entry в gitglossary(7). < stash> Эта опция допустима только для команд apply, branch, drop, pop, show. Ссылка в форме stash@{< revision>}. Когда не указана < stash> подразумевается последний элемент stash (т. е. stash@{0}). ОБСУЖДЕНИЕ Элемент (сохранение) stash представлен как фиксация, дерево которой записывает состояние рабочего каталога, а его первым родительским элементом является фиксация на HEAD когда элемент stash был создан. Дерево второго родителя записывает состояние индекса при создании элемента, и он становится потомком фиксации HEAD. Граф наследования выглядит примерно так: .----W Здесь H это фиксация HEAD, I это фиксация, записывающая состояние индекса, и W это фиксация, записывающая состояние рабочего дерева. ПРИМЕРЫ Pull в грязное дерево Когда находитесь посередине какой-то работы, вы узнаете, что что-то в основном потоке разработки (upstream) поменялось, и возможно имеет отношение к тому, что вы делаете. Когда ваши локальные изменения не конфликтуют с изменениями в upstream, простой git pull позволит вам двигаться дальше. Однако есть случаи, когда ваши локальные изменения создают конфликт с изменениями в upstream, и git pull отказывается перезаписать ваши изменения. В таком случае вы все равно можете сделать stash для ваших изменений, выполнить pull, и затем откатить stash, примерно так: $ git pull Прерванный рабочий процесс Когда находитесь посередине какой-то работы, пришел ваш босс и потребовал немедленно что-то пофиксить. Обычно вы сделаете commit во временную ветку, чтобы как-то сохранить свои изменения, и вернетесь в оригинальную ветку для внесения требуемых исправлений, примерно так: # ... кодите кодите кодите ... Для упрощения этой процедуры вы можете использовать git stash, примерно так: # ... кодите кодите кодите ... Тестирование частичных фиксаций Вы можете использовать git stash push --keep-index, когда хотите сделать два или большее количество фиксаций из изменений в рабочем дереве, и хотите протестить каждое изменение перед фиксацией: # ... кодите кодите кодите ... Восстановление элементов stash entries, которые были по ошибке очищены/выкинуты Если вы по ошибке выполнили drop или очистку элементов stash, они не могут быть восстановлены с помощью обычных механизмов безопасности. Однако вы можете попробовать следующее колдунство, чтобы получить список элементов stash, все еще находящихся в вашем репозитории, но более недоступных: git fsck --unreachable | СМ. ТАКЖЕ git-checkout(1), git-commit(1), git-reflog(1), git-reset(1), git-switch(1) [Ссылки] 1. Инструменты Git Припрятывание и очистка site:git-scm.com. |