繁体   English   中英

Git 按名称/消息删除存储

[英]Git delete stash by name/message

据我所知 Git 不能按名称/消息删除存储(尽管它可以按名称保存 git 存储保存“名称”)。 但是,我真的很想为我的工作流程创建一个“组合别名”选项(特别是对于不太熟悉 git 并且应该尊重工作流程的同事)

我知道我可以自己创建一个 bash 脚本,但我在想也许有人已经制作了这样的脚本?。 这样我就可以按名称删除存储...

我的“更新”别名大致是这样的:

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

当前别名的问题是,如果没有任何东西可以存储,它将恢复旧的存储。

另一种选择是检查是否需要隐藏,但我一直想要一个 git 隐藏按名称删除选项,所以这就是我问这个的原因。

PS:我正在使用 posh-git 但 bash 命令应该在别名中工作。

谢谢

您可以先检查是否有任何东西可以存储,以解决该问题。 您可以使用一种方法来检查索引是否为脏,这是使用Git检查脏索引或未跟踪文件中建议的方法

例如,如果存储没有变化,此命令将不输出任何内容:

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的名称作为regexp搜索git reflog stash区,并以stash@{<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添加这两个别名,您可以看到.git/config在文件中的文件修改为:

git sshow <regexp matching the name of the stash>

您可以使用以下方式删除存储:

git ssdrop <regexp matching the name of the stash>

我找到了一种按名称删除藏匿处的方法。 你可以这样做:

git stash drop stash@{$((git stash list | grep -w NAME_OF_THE_STASH) | cut -d "{" -f2 | cut -d "}" -f1)}

这是脚本的细分:

  1. 我正在使用标准的git stash drop stash@{n}结构
  2. 我们需要使用您要删除的名称获取存储的n 为此,我们列出了藏匿处和 grep 具有匹配名称的项目。 为此,我使用了脚本: git stash list | grep -w NAME_OF_THE_STASH git stash list | grep -w NAME_OF_THE_STASH
  3. 从该项目中,我们需要提取方括号{}内的索引。 我们可以通过在第 2 项的脚本中添加以下内容来提取该数字| cut -d "{" -f2 | cut -d "}" -f1 | cut -d "{" -f2 | cut -d "}" -f1

我测试了它,它对我很有用。

顺便说一句,如果您输入一个不存在的名称,则不会删除任何内容。

此外,只会删除完全匹配的名称。 如果您不需要完全匹配,则删除grep之后的-w

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM