所以我正在学习本周使用Git Stash并且发现所有这些stashes已经积累在我的系统上。我放错了一些代码,现在我有十几个代码0-11。
有没有办法可以在存储区中的文件中搜索这些存储区中的字符串值,以找到我正在寻找的代码? 要么 我是否只需要通过并重新应用每个存储来搜索/查看它们我想要找到的代码?
答案 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
其中
H
是HEAD
提交,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>
是引用提交的标记对象的对象名称 对象
对于顶部存储条目,请使用
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之前附加了以显示每个差异的来源。