是否可以搜索Git Stash项目?

时间:2017-03-02 12:22:14

标签: git search

所以我正在学习本周使用Git Stash并且发现所有这些stashes已经积累在我的系统上。我放错了一些代码,现在我有十几个代码0-11。

有没有办法可以在存储区中的文件中搜索这些存储区中的字符串值,以找到我正在寻找的代码? 要么 我是否只需要通过并重新应用每个存储来搜索/查看它们我想要找到的代码?

6 个答案:

答案 0 :(得分:8)

git stash show -p stash@{n} | grep "john cena"是我认为唯一的选择。

当然,您可以编写自己的脚本。

答案 1 :(得分:3)

git grep命令接受"树"对象:

  

概要

git grep [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
              [-v | --invert-match] [-h|-H] [--full-name]
              [-E | --extended-regexp] [-G | --basic-regexp]
              [-P | --perl-regexp]
              [-F | --fixed-strings] [-n | --line-number]
              [-l | --files-with-matches] [-L | --files-without-match]
              [(-O | --open-files-in-pager) [<pager>]]
              [-z | --null]
              [-c | --count] [--all-match] [-q | --quiet]
              [--max-depth <depth>]
              [--color[=<when>] | --no-color]
              [--break] [--heading] [-p | --show-function]
              [-A <post-context>] [-B <pre-context>] [-C <context>]
              [-W | --function-context]
              [--threads <num>]
              [-f <file>] [-e] <pattern>
              [--and|--or|--not|(|)|-e <pattern>...]
              [ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <tree>...]
              [--] [<pathspec>...]

现在考虑一个存储条目是从中合成的树对象 调用git stash时工作树的内容 其父母是HEAD的两个父母 和指数中的国家;引用手册:

  

存储表示为树记录的提交   工作的状态   目录,其第一个父项是HEAD处的提交   当藏匿创建时。   第二个父树的树记录了索引的状态   存储被创建,并且它成为HEAD提交的子项。   祖先图如下所示:

              .----W
             /    /
       -----H----I
     

其中HHEAD提交,   I是一个记录索引状态的提交,   W是一个记录工作树状态的提交。

因此,您可以使用树位来grep您的存储条目:

  • git grep [options] term stash@{n}会对W提交进行grep 对于term,即 它会grep工作树文件的保存状态。

  • 要grep您需要引用的stashed条目的索引的状态 到W的第二个父母;这是使用^2后缀:

    完成的
     git grep [options] term stash@{n}^2
    
  • 要隐藏存储条目的基线提交的状态 - 至少 有趣的案例 - 参考其第一个父母:

     git grep [options] term stash@{n}^1
    

^<n>手册中解释了git help revisions符号:

  

<rev>^,例如HEAD^v1.5.1^0修订后缀^   参数表示该提交对象的第一个父对象。 ^<n>表示   第<n>位父(即<rev>^相当于<rev>^1)。作为一个   特殊规则,<rev>^0表示提交本身并在以下时使用   <rev>是引用提交的标记对象的对象名称   对象

TL; DR

对于顶部存储条目,请使用

  • git grep whatever stash@{0} grep是什么状态 工作树。
  • git grep whatever stash@{0}^2 grep是什么状态 索引。

答案 2 :(得分:2)

一衬垫:

git grep whatever $(git stash list -q | cut -d":" -f 1)

和git grep方便地输出更改的行,其中包含存储的名称和文件的名称:

stash@{43}:common/ot/whatever.js:exports.whatever = (foo, deps) => {
stash@{44}:common/ot/whatever.js:exports.whatever = (foo, deps) => {

答案 3 :(得分:2)

git stash list -S "my string"在Git 2.28上工作,以查找添加或删除"my string"的补丁。

我不知道这项功能已经存在多久了;该文档暗示它应该接受与git log相同的所有选项,包括-S,但我清楚地记得几年前无法通过这种方式进行搜索。

答案 4 :(得分:0)

要添加到 Andrejs Cainikovs回答,您可以添加seq来搜索所有内容 barra_izquierda_vaso_moleculas = Bodies.rectangle(200,200,10,200,{isStatic: true}); barra_derecha_vaso_moleculas = Bodies.rectangle(500,200,10,200,{isStatic: true}); barra_inferior_vaso_moleculas = Bodies.rectangle(350,300,300,10,{isStatic: true}); vaso_moleculas = Body.create({ parts: [barra_izquierda_vaso_moleculas,barra_derecha_vaso_moleculas,barra_inferior_vaso_moleculas], restitution: 0, friction: 0, frictionStatic : 0, frictionAir: 0, inertia: Infinity, mass: 1, isStatic: true, }); World.add(world,vaso_moleculas); createjs.Tween.get(vaso_moleculas.constraintImpulse).wait(2000).to({angle:0.06},3000);

答案 5 :(得分:0)

有一些有用的想法in this gist and discussion thread

首先,仅列出匹配的存储区很容易(使用-i或不使用-i,取决于大小写)

git stash list -i -G<regexp>

如果没有太多要挖掘的内容,则只需添加-p即可完整打印匹配的存储区。

git stash list -i -p -G<regexp>

为“真实”案例提供更多功能,请添加到.gitconfig

[alias]
    stashgrep = "!f() { for i in `git stash list --format=\"%gd\"` ; \
              do git stash show -p $i | grep -H --label=\"$i\" \"$@\" ; done ; }; f"

,然后您可以使用任何喜欢的grep参数调用git stashgrep。例如

git stashgrep -i <regexp>

这与上面的某些答案不同,因为它在存储ID之前附加了以显示每个差异的来源。