有时我会使用git stash
来快速摆脱我认为我可能想要重温的任何尖峰或实验。很多时候,我都没有重新访问它们,我的藏匿列表也被污染了。
我想删除git stash
中除了一个特定藏匿区之外的所有内容。
示例:我的git stash list
如下所示:
stash@{0}: On test-branch: try something
stash@{1}: WIP on spiked-branch: 2cc4751 another spike attempt
stash@{2}: On master: 2cc4751 experimental refactoring
stash@{3}: WIP on spiked-branch: 3ccfc4d first spike attempt
我想保留stash@{2}
。有一个简单的方法吗?
我知道我可以通过以下步骤实现我的结果:
git reset --hard origin/master #=> ensure I have clean branch
git stash pop stash@{2} #=> put stash on current branch
git stash clear #=> clear all stashes
git stash #=> re-stash what I popped in step 2
这似乎很乏味。有更有效的方法吗?
答案 0 :(得分:3)
使命令不那么繁琐的一种方法是将命令放在脚本中。在这里,我做了一些修改,使其更加健壮:
#!/bin/sh
git reset --hard HEAD && git stash pop stash@{$1} && git stash clear && git stash
版本变更:
HEAD
代替分支名称,这样您就不会意外地移动分支指针。&&
将命令链接在一起,因为如果一个命令失败,您可能不想继续下一个命令。然后您可以将其称为例如:
mystashclear.sh 2
您想要保存2号藏匿处。
或者,您可以使用别名:
git alias.clear-except "! git reset --hard HEAD && git stash pop stash@{$1} && git stash clear && git stash"
你可以再次使用它:
git clear-except 2