据我所知,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命令应该在别名中工作。
由于
答案 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>