删除与特定分支关联的所有stashes

Kev*_*ica 11 git

我习惯于将我的变化隐藏在git中并再次应用它们git stash apply.这样做的好处是可以防止我意外丢失我所造成的藏匿,但这也意味着我的藏匿列表增长得相当快.

当我完成分支时,我会通过我的存储列表返回并手动删除与分支相关的所有存储.有没有办法在一个命令中执行此操作?

例如,我当前的存储列表如下所示:

kevin@localhost:~/my/dev/work$ git stash list
stash@{0}: WIP on master: 346f844 Commit comment
stash@{1}: WIP on second_issues: a2f63e5 Commit comment
stash@{2}: WIP on second_issues: c1c96a9 Commit comment
stash@{3}: WIP on second_issues: d3c7949 Commit comment
stash@{4}: WIP on second_issues: d3c7949 Commit comment
stash@{5}: WIP on second_issues: d3c7949 Commit comment
stash@{6}: WIP on second_issues: 9964898 Commit comment
Run Code Online (Sandbox Code Playgroud)

是否有一个命令会丢弃所有的藏匿处second_issues

Ale*_*olo 4

那这个呢?这是一种快速而肮脏的方式,可以删除在给定分支上创建的存储。

它只是列出所有存储,使用 grep 搜索在分支上创建的存储,获取其存储名称,最后git stash drop通过 xargs 传递这些名称。

git stash list | grep -E 'stash@{[0-9]+}.+ YOUR_BRANCH_NAME' | cut -d ':' -f 1 | xargs git stash drop
Run Code Online (Sandbox Code Playgroud)

编辑

深入研究手册页,它说git stash list还接受git log格式选项。
因此,我们告诉它打印仅匹配的行YOUR_BRANCHNAME,并在这些行中仅打印其“重新标记身份名称”(%gd: shortened reflag selector, e.g., stash@{1}来自手册页)。
然后,我们将输出传递给以xargs删除存储。

git stash list --grep='YOUR_BRANCHNAME' --format='%gd' | xargs git stash drop
Run Code Online (Sandbox Code Playgroud)