Git удалить stash по имени/сообщению

Насколько я знаю, Git не может удалить кошелек по имени/сообщению (несмотря на то, что он может сохранить его по имени с помощью git stash save "name"). Тем не менее, мне очень нравится иметь этот вариант для "комбинированного псевдонима", который я хочу создать для своего рабочего процесса (особенно для коллег, которые не знакомы с git и должны уважать рабочий процесс)

Я знаю, что могу создать скрипт bash сам, но я думал, может быть, кто-то уже сделал такой скрипт !? Так что я могу удалить кошелек по имени...

Мой псевдоним "update" примерно такой:

git stash save -u "tempstash"
git fetch origin
[apply our workflow/update strategy]
git stash pop --index (should be: git stash delete "tempstash")

Проблема с текущим псевдонимом заключается в том, что, если нет ничего, чтобы остановить, он восстановит старый тайник.

Другой вариант - проверить, требуется ли stashing, но я всегда хотел удалить git stash по имени, поэтому я спрашиваю об этом.

PS: im, используя команды posh-git, но bash должны работать в псевдониме.

благодаря

2 ответа

Вы можете решить эту проблему, проверяя, есть ли что-нибудь, чтобы спрятать сначала. Вы можете использовать один из способов проверить, является ли индекс грязным, который предлагается в " Проверка" для грязного индекса или не проверенных файлов с помощью Git

Например, эта команда ничего не выводит, если нет изменений в stash:

git status --porcelain

Используя эту команду, сценарий может выглядеть так:

is_stashing=$(git status --porcelain)
test -n "$is_stashing" && git stash save -u
git fetch origin
[apply our workflow/update strategy]
test -n "$is_stashing" && git stash pop --index


Решение состояло бы в поиске git reflog stash с использованием имени stash как regexp и получения его имени в формате stash@{<number>}</number>.

Затем вы можете создать псевдоним в git для использования его в качестве команды. Быстрое и грязное решение, которое может быть значительно улучшено, выглядит примерно так:

[alias]
 sshow = "!f() { git stash show 'git reflog stash | egrep $* | awk '{printf $2}' | sed 's/://' '; }; f"
 ssdrop = "!f() { git stash drop 'git reflog stash | egrep $* | awk '{printf $2}' | sed 's/://' '; }; f"

Добавив эти две псевдонимы в ваш .git/config вы можете увидеть файлы, измененные в stash:

git sshow

и вы можете оставить бросок с помощью:

git ssdrop

licensed under cc by-sa 3.0 with attribution.