git stash clear,除了特定的藏匿

时间:2016-12-22 21:18:47

标签: git git-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

这似乎很乏味。有更有效的方法吗?

1 个答案:

答案 0 :(得分:3)

使命令不那么繁琐的一种方法是将命令放在脚本中。在这里,我做了一些修改,使其更加健壮:

#!/bin/sh

git reset --hard HEAD && git stash pop stash@{$1} && git stash clear && git stash

版本变更:

  1. 使用HEAD代替分支名称,这样您就不会意外地移动分支指针。
  2. 根据第一个参数选择要弹出的存储。
  3. 使用&&将命令链接在一起,因为如果一个命令失败,您可能不想继续下一个命令。
  4. 然后您可以将其称为例如:

    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