【问题标题】:How to remove range of git stash?如何删除 git stash 的范围?
【发布时间】:2017-01-25 15:34:09
【问题描述】:

我想从git stash list 中删除所有存储,除了最近的。

例如我想在一个 git 命令中删除 13 的存储:

stash@{0}: On master: Test related changes
stash@{1}: On master: Tets
stash@{2}: On master: Integrate bunyan logging and http2
stash@{3}: On master: Integrate bunyan logging and http2

我检查了这个答案https://stackoverflow.com/a/5737041/3878940,但它只适用于删除一个存储。有没有 git 命令可以删除stashes 的范围?

【问题讨论】:

    标签: git git-stash


    【解决方案1】:

    如果要删除 stash 1 到 3,只需进入 shell 并键入以下命令:

    for n in {1..3}
    do
    git stash drop stash@{1}   
    done
    

    输出

    Dropped stash@{1} (79f369e9c4ce8348af8bd2da63f384cc7d02655e)
    Dropped stash@{1} (744d2fc40e25f2db1bdc182d41f6eb9134957df4)
    Dropped stash@{1} (7f9989207a675549866ab1fc7b15082eb4161e9f)
    

    由于 git stash 使用堆栈结构,每次删除第 n 个索引时,堆栈索引都会减少 1。所以最终,您最终会删除 1 到 3 个存储。 因此,像这样,您也可以像这样迭代删除长度为 n 的存储:

    for n in {1..n}
    do
    git stash drop stash@{1}   
    done
    

    【讨论】:

    • 此答案中{1..n} 中的n 是占位符;从字面上输入{1..n} 只会执行一次drop。
    • @jayqui 它将继续删除存储,因为我已经解释过它使用堆栈结构,所以无论在顶部,即这里的 1,它都会一直下降到 n 次。
    • 比接受的答案更好,因为它带有代码。 :P
    【解决方案2】:

    简短回答:不。

    略长一点的答案:不,但它是微不足道的。您想要删除 stash 1、2 和 3。当您删除 stash #1 时,stash 2 和 3 分别成为 stash 1 和 2。当您删除新的 stash #1 时,stash #2(最初是 #3)变成 stash #1。因此,要删除三个 stash,从 #1 开始,只需将 stash #1 删除 3 次即可。

    【讨论】:

    • 对您的回答略有改进。相反,为了避免混淆并在删除时调整存储 ID,只需按 id 的降序 中的git stash drop stash@{id}。所以如果你想删除 id 的 1,2,3 : 'git stash drop stash@{3}' 然后 'git stash drop stash@{2}' 然后 'git stash drop stash@{1}' 。
    • @DhirajGandhi:这仍然会导致 #4 的存储最终变为 #1。不过,它可能会帮助您跟踪必须去的次数,在这种情况下,它可能很有价值。
    • torek: 没错,但是stash #4最终不会被删除,所以@DhirajGandhi的回答没有问题。
    【解决方案3】:

    我会在下面提供的答案中添加一些额外的东西 如果您还想记录丢弃的存储的索引 可以使用降序和$n如下图

    for n in {3..1}; do git stash drop stash@{$n}; done;
    

    输出将类似于..

    Dropped stash@{3} (beeaf3629b53d612b1a3fabb7b0c4f77d17e9b71)
    Dropped stash@{2} (5a687ca9a93b3190882a9af2c15134e75f063f41)
    Dropped stash@{1} (e33dfc42d03166def5dbb60baa975efb21b27f07)
    

    【讨论】:

    • 你错过了{$n}之前的@,否则这是最好的答案
    【解决方案4】:

    如果您在 PowerShell 上使用 Git,您可以轻松获得它。有两种方法可以实现这一点。 (n 是存储的数量)

    第一种方法,

    for($i = 1; $i -lt n; $i++){ git stash drop "stash@{1}"}
    

    第二种方法,

    for($i = n-1; $i -gt 0; $i--){ git stash drop "stash@{$i}"}
    

    我假设你有无数的存储,你可以像这样得到存储的计数(n),

    git stash list | measure-object -line
    

    【讨论】:

      【解决方案5】:

      假设您想删除除第一个之外的所有旧存储,您可以使用这样的脚本:

      for (( ; ; ))
      do
          git stash drop stash@{1}
          Result = $?
          if [ Result != 0 ] 
          then
            break
          fi
      done
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 1970-01-01
        • 2012-12-25
        • 2016-09-13
        相关资源
        最近更新 更多