У меня всегда было впечатление, что вы можете дать тайнику имя, сделав git stash save stashname
, что позже вы могли бы применить git stash apply stashname
. Но, похоже, что в этом случае все, что происходит, stashname
будет использоваться в качестве описания тайника.
Нет ли способа на самом деле назвать тайник? Если нет, что бы вы порекомендовали для достижения эквивалентной функциональности? По сути, у меня есть небольшой тайник, который я хотел бы периодически применять, но не хочу всегда охотиться за git stash list
тем, каков его фактический номер тайника.
git stash push -m stashname
является текущим синтаксисом .git stash save stashname
был объявлен устаревшимОтветы:
Вот как вы это делаете:
Где
"my_stash"
имя тайника.Еще несколько полезных вещей: все тайники хранятся в стеке. Тип:
Это перечислит все ваши тайники.
Чтобы применить тайник и удалить его из стека, введите:
Чтобы применить тайник и сохранить его в стеке, введите:
Где
n
находится индекс скрытого изменения.источник
git stash apply <custom-name>
git stash push -m my_stash
является текущим синтаксисом .git stash save my_stash
был объявлен устаревшимgit stash save
является устаревшим , как из 2.15.x / 2.16, вместо этого вы можете использоватьgit stash push -m "message"
Вы можете использовать это так:
git stash push -m "message"
где «сообщение» - это ваша заметка для этого тайника.
Для того , чтобы восстановить тайник , вы можете использовать:
git stash list
. Это выведет такой список, например:Тогда вы просто используете,
apply
давая емуstash@{index}
:Справочная страница по git stash
источник
push
а неsave
синтаксис: git stash pushgit stash push
: stackoverflow.com/a/47231547/6309git stash apply stash@{1}
в Powershell, вы получитеerror: unknown switch 'e'
ответ. Вместо этого используйтеgit stash apply --index 1
orgit stash apply 'stash@{1}'
или escape}
и{
с обратной чертой `.Вы можете превратить тайник в ветку, если считаете, что это достаточно важно:
со страницы руководства:
Это создает и проверяет новую ветвь с именем,
<branchname>
начиная с коммита, в котором он<stash>
был изначально создан, применяет записанные изменения<stash>
к новому рабочему дереву и индексу, а затем удаляет<stash>
if, если оно успешно завершается. Если нет<stash>
, применяется последний.Это полезно, если ветвь, в которой вы работали
git stash save
, изменилась настолько, что git stash не работает из-за конфликтов. Поскольку хранилище применяется поверх коммита, который был HEAD во время запуска git stash, он восстанавливает исходное сохраненное состояние без конфликтов.Позже вы можете переместить эту новую ветку в другое место, которое является потомком того места, где вы находились, когда прятались.
источник
git stash apply
)git stash push -m 'name'
работал.Если вы просто ищете легкий способ сохранить некоторые или все текущие изменения рабочей копии, а затем повторно применить их по желанию, рассмотрите файл исправления:
Время от времени я задаюсь вопросом, должен ли я использовать тайники для этого, и тогда я вижу такие вещи, как безумие выше, и я доволен тем, что я делаю :)
источник
Тайники не предназначены для того, чтобы быть постоянными вещами, как вы хотите. Возможно, вам лучше использовать теги коммитов. Создайте вещь, которую вы хотите спрятать. Сделайте коммит из этого. Создайте тег для этого коммита. Затем вернитесь к своей ветке
HEAD^
. Теперь, когда вы захотите повторно применить этот тайник, вы можете использовать егоgit cherry-pick -n tagname
(-n
есть--no-commit
).источник
named commit
тусоваться. Единственное легкое раздражение заключается в том, что он не фиксируется при выборе вишни и остается в diff, что означает, что его нужно будет не регистрировать вручную во время следующего коммита.--no-stage
вариант! Связанный: stackoverflow.com/questions/32333383/…использовать,
git stash push -m aNameForYourStash
чтобы сохранить его. Затем используйте,git stash list
чтобы узнать индекс тайника, который вы хотите применить. Затем используйте,git stash pop --index 0
чтобы открыть тайник и применить его.примечание: я использую git версии 2.21.0.windows.1
источник
git stash {push,save}
У меня есть две функции в моем
.zshrc
файле:Используя их таким образом:
источник
Что насчет этого?
источник
git stash apply stash^{/<regex>}
это не работает (это не так на самом деле поиск в тайнике, см. комментарии под принятым ответом ).git stash list
который показывает мне тайники вместе с их связанным индексным номером, я тогда иду 2.git stash apply 0
- где 0 - индексный номер, который я бы посмотрел по первой командекличка
sapply = "!f() { git stash apply \"$(git stash list | awk -F: --posix -vpat=\"$*\" \"$ 0 ~ pat {print $ 1; exit}\")\"; }; f"
Применение
git sapply "<regex>"
Редактировать: я придерживался своего первоначального решения, но я понимаю, почему большинство предпочло бы версию Итана Рейснера (выше). Так что просто для записи:
источник
awk -F: '{print $1}'
устранит необходимость в sed полностью. И зачем оборачивать это в функцию? И использованиеawk -F: -vpat="$*" '$0 ~ pat {print $1}'
должно позволить сбросить grep также. Хотя может потребоваться немного другое цитирование для шаблона.{print $1; exit}
чтобы выйти после первой соответствующей строки.К сожалению,
git stash apply stash^{/<regex>}
это не работает (на самом деле он не ищет в тайнике, см. Комментарии под принятым ответом ).Вот вставные замены, которые ищут
git stash list
по регулярному выражению, чтобы найти первое (самое последнее),stash@{<n>}
а затем передать этоgit stash <command>
:Обратите внимание, что возвращаются правильные коды результатов, поэтому вы можете использовать эти команды в других сценариях. Это можно проверить после запуска команд с:
Просто будьте осторожны с эксплойтами расширения переменных, потому что я не был уверен в
--grep=$1
части. Возможно, так и должно быть,--grep="$1"
но я не уверен, что это помешает разделителям регулярных выражений (я открыт для предложений).источник
Этот ответ многим обязан Клемену Славичу. Я бы только прокомментировал принятый ответ, но мне пока не хватает представителя :(
Вы также можете добавить псевдоним git, чтобы найти ссылку на stash и использовать ее в других псевдонимах для show, apply, drop и т. Д.
Обратите внимание, что причина для
ref=$( ... ); echo ${ref:-<no_match>};
шаблона в том, что пустая строка не возвращается, что приведет к тому, что sshow, sapply и sdrop нацелятся на последний тайник вместо сбоя, как и следовало ожидать.источник
Псевдоним. Это может быть более прямой синтаксис для Unix-подобных систем без необходимости инкапсуляции в функцию. Добавьте следующее в ~ / .gitconfig под [alias]
Использование: Саппи регулярное выражение
Пример: git sshow MySecretStash
Дефис в конце говорит, что берут данные из стандартного ввода.
источник
Используйте маленький скрипт bash, чтобы найти номер тайника. Назовите это "бесполезным"
Применение:
... где foo является подстрокой имени тайника, который вы хотите.
источник
Используйте,
git stash save NAME
чтобы сохранить.Затем ... вы можете использовать этот скрипт, чтобы выбрать, какой из них применить (или всплыть):
Мне нравится видеть имена тайников и выбирать. Также я использую Zshell и, честно говоря, не знал, как использовать некоторые из псевдонимов Bash выше;)
Примечание: как говорит Кевин, вы должны использовать вместо этого теги и черри.
источник
git stash save
не рекомендуется в пользуgit stash push
.Это один из способов сделать это с помощью PowerShell:
Подробнее здесь
источник
в моей рыбной раковине
использование
gsap name_of_stash
источник
Здесь поздно вечером, но если вы используете VSCode, быстрый способ сделать это - открыть палитру команд (CTRL / CMD + SHIFT + P) и набрать «Pop Stash», вы сможете получить свой тайник по имени без необходимости использовать git CLI
источник
git stash apply
также работает с другими ссылками, чемstash@{0}
. Таким образом, вы можете использовать обычные теги, чтобы получить постоянное имя. Это также имеет то преимущество, что вы не можете случайноgit stash drop
илиgit stash pop
это.Таким образом, вы можете определить псевдоним
pstash
(так называемый «постоянный тайник») следующим образом:Теперь вы можете создать помеченный тайник:
и
show
иapply
это снова , как обычно:источник
Я не думаю, что есть способ сделать сундук с его именем.
Я создал функцию Bash, которая делает это.
Пример использования:
Я надеюсь, что это помогает!
источник
Для всего, кроме создания тайника , я бы предложил другое решение, введя fzf в качестве зависимости. Я рекомендую потратить 5 минут вашего времени и познакомиться с ним, так как это в целом повышает производительность.
Во всяком случае, соответствующая выдержка из их страницы с примерами, предлагающей поиск тайника. Очень легко изменить скриптлет, чтобы добавить дополнительную функциональность (например, приложение stash или удаление):
источник
Так что я не уверен, почему по этой теме так много потрясений. Я могу назвать git stash как push, так и устаревшим сохранением, и я могу использовать регулярное выражение, чтобы вернуть его с помощью apply:
Git stash метод, чтобы использовать имя для применения
Как уже упоминалось ранее, команда сохранения устарела, но она все еще работает, поэтому вы можете использовать ее на старых системах, где вы не можете обновить их с помощью push-вызова. В отличие от команды push, ключ -m не требуется при сохранении.
Это Git 2.2 и Windows 10.
Визуальное доказательство
Вот красивый анимированный GIF, демонстрирующий процесс.
Цепочка событий
GIF работает быстро, но если вы посмотрите, процесс выглядит так:
Имеет ли это смысл?
Честно говоря, я не уверен, какая польза от этого подхода. Есть смысл дать тайнику имя, но не поиск. Может быть, было бы полезно написать сценарий для полок и небрежных процессов, но все равно проще просто скопировать тайник по имени.
Это выглядит намного проще для меня, чем регулярное выражение.
источник