Git按名称/消息删除存储

时间:2013-12-23 12:54:15

标签: git git-stash

据我所知,Git无法通过名称/消息删除存储(尽管它可以使用git stash save“name”按名称保存)。但是,我真的希望为我的工作流程创建一个“组合别名”的选项(特别是那些不熟悉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 stash delete by name选项,这就是为什么我要问这个。

PS:即时通讯使用posh-git但bash命令应该在别名中工作。

由于

2 个答案:

答案 0 :(得分:2)

您可以通过检查是否存在任何要先藏匿的内容来解决问题。您可以使用其中一种方法检查Checking for a dirty index or untracked files with 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

答案 1 :(得分:1)

解决方案是使用隐藏名称git reflog stash搜索regexp,并以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 sshow <regexp matching the name of the stash>

你可以用以下内容删除藏匿处:

git ssdrop <regexp matching the name of the stash>