git 清空藏品,特定藏品除外
git stash clear, except a specific stash
有时我使用 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
这看起来很乏味。有没有更有效的方法?
一种让它不那么乏味的方法是将命令放在脚本中。我已经这样做了,并进行了一些修改以使其更健壮:
#!/bin/sh
git reset --hard HEAD && git stash pop stash@{} && git stash clear && git stash
与您的版本相比的变化:
- 使用
HEAD
而不是分支名称,这样您就不会意外地移动分支指针。
- Select 根据第一个参数弹出哪个存储。
- 使用
&&
将命令链接在一起,因为如果一个失败,您可能不想继续下一个。
您可以这样称呼它,例如:
mystashclear.sh 2
你想保存第 2 号藏品的地方。
或者,您可以只使用别名:
git alias.clear-except "! git reset --hard HEAD && git stash pop stash@{} && git stash clear && git stash"
您还可以将其用作:
git clear-except 2
有时我使用 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
这看起来很乏味。有没有更有效的方法?
一种让它不那么乏味的方法是将命令放在脚本中。我已经这样做了,并进行了一些修改以使其更健壮:
#!/bin/sh
git reset --hard HEAD && git stash pop stash@{} && git stash clear && git stash
与您的版本相比的变化:
- 使用
HEAD
而不是分支名称,这样您就不会意外地移动分支指针。 - Select 根据第一个参数弹出哪个存储。
- 使用
&&
将命令链接在一起,因为如果一个失败,您可能不想继续下一个。
您可以这样称呼它,例如:
mystashclear.sh 2
你想保存第 2 号藏品的地方。
或者,您可以只使用别名:
git alias.clear-except "! git reset --hard HEAD && git stash pop stash@{} && git stash clear && git stash"
您还可以将其用作:
git clear-except 2