Прикро, що git stash apply stash^{/<regex>}
це не працює (він насправді не шукає в списку скриньки, дивіться коментарі під прийнятою відповіддю ).
Ось замінні елементи, що шукають, що шукають git stash list
за допомогою регулярного виразу, щоб знайти перший (найновіший), stash@{<n>}
а потім передати його git stash <command>
:
# standalone (replace <stash_name> with your regex)
(n=$(git stash list --max-count=1 --grep=<stash_name> | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash show "$n" ; else echo "Error: No stash matches" ; return 1 ; fi)
(n=$(git stash list --max-count=1 --grep=<stash_name> | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash apply "$n" ; else echo "Error: No stash matches" ; return 1 ; fi)
# ~/.gitconfig
[alias]
sshow = "!f() { n=$(git stash list --max-count=1 --grep=$1 | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash show "$n" ; else echo "Error: No stash matches $1" ; return 1 ; fi }; f"
sapply = "!f() { n=$(git stash list --max-count=1 --grep=$1 | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash apply "$n" ; else echo "Error: No stash matches $1" ; return 1 ; fi }; f"
# usage:
$ git sshow my_stash
myfile.txt | 1 +
1 file changed, 1 insertion(+)
$ git sapply my_stash
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: myfile.txt
no changes added to commit (use "git add" and/or "git commit -a")
Зауважте, що відповідні коди результатів повертаються, щоб ви могли використовувати ці команди в інших сценаріях. Це можна перевірити, виконавши команди за допомогою:
echo $?
Будьте обережні щодо експлуатування змінних розширень, тому що я не був впевнений у --grep=$1
частині. Можливо, це може бути, --grep="$1"
але я не впевнений, чи це заважатиме розмежувачам регулярних виразів (я відкритий для пропозицій).
git stash push -m stashname
є поточним синтаксисом .git stash save stashname
застаріло.