是否可以通过Git存储项目进行搜索?
所以我这周在学习如何使用Git存储,并发现所有这些存储都在我的系统上积累。我把一些代码放错地方了,现在我有十几个代码0-11 有没有一种方法可以让我在这些存储中搜索存储中的文件中的字符串值,从而找到我要查找的代码? 或 我是否只需要检查并重新应用每一个隐藏,以在其中搜索/查找我试图查找的代码是否可以通过Git存储项目进行搜索?,git,search,Git,Search,所以我这周在学习如何使用Git存储,并发现所有这些存储都在我的系统上积累。我把一些代码放错地方了,现在我有十几个代码0-11 有没有一种方法可以让我在这些存储中搜索存储中的文件中的字符串值,从而找到我要查找的代码? 或 我是否只需要检查并重新应用每一个隐藏,以在其中搜索/查找我试图查找的代码 2021/03/18:我发现其他信息与此相关,只是其中的一个更新 您可以创建一个git别名来搜索所有的分支 修改您的.gitconfig文件,只需通过“git stash search”调用 git st
2021/03/18:我发现其他信息与此相关,只是其中的一个更新 您可以创建一个git别名来搜索所有的分支 修改您的.gitconfig文件,只需通过“git stash search”调用
git stash show-p stash@{n}grep“john cena”
是我认为唯一的选择
当然,您可以编写自己的脚本。git grep命令接受一个“tree”对象: 概要
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>...]
其中,H
是头
提交,
I
是记录索引状态的提交,
而W
是记录工作树状态的提交
因此,您可以在树上放置以下物品:
将grep提交git grep[options]术语stash@{n}
commit 对于W
,即, 它将grep工作树文件的保存状态术语
- 要grep隐藏条目的索引状态,需要参考
给
的第二个父级;这是使用W
后缀完成的:^2
git grep [options] term stash@{n}^2
- 要grep隐藏项的基线状态,请至少提交一次
有趣的案例是指其第一个父级:
git grep [options] term stash@{n}^1
^
符号在git帮助修订版
手册中有说明:
^
,例如HEAD^
,v1.5.1^0
版本的后缀^
参数表示提交对象的第一个父对象<代码>^表示
第
个父项(即^
相当于^1
)。作为一个
特殊规则,^0
表示提交本身,在
是引用提交的标记对象的对象名
反对
TL;博士
对于顶部隐藏条目,使用
to grep 工作树git grep whatever stash@{0}
to grep文件的状态是什么 索引git grep whatever stash@{0}^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) => {
增加
Andrejs Cainikov回答:您可以添加seq来搜索所有内容
seq 0 5 | xargs-I{}git stash show-p stash{{\}grep您的{u模式
有一些有用的想法
首先,只列出匹配的存储是很容易的(有或没有-i,取决于具体情况)
如果“真实”案例的功能更强,请添加到.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参数(-w,-i)调用git stashgrep
。e、 g
git隐藏列表-S“my string”
在git 2.28上工作,以查找添加或删除“my string”
的修补程序
我不知道这种能力已经存在多久了;文档暗示它应该接受与git log相同的所有选项,包括
-S
,但我清楚地记得几年前无法以这种方式进行搜索。git stash show-p stash@{n}grep“john cena”
是我认为的唯一选项。当然,你可以围绕这一点编写自己的脚本。@AndrejsCainikovs搞定了!非常感谢你。我一直忘了爱的力量grep@AndrejsCainikovs把它作为答案输入,我会标记它。@Elijah,这有助于理解隐藏条目——虽然在某些方面是“特殊的”——在所有其他方面都是真正的合并提交,您可以对它们执行任何其他提交操作。这将帮助您搜索所有stash@LibinVarghese,oneliner:git show$(git stash list | cut-d):-f1)| grep“john cena”
注意,隐藏哈希或名称的git show
与隐藏哈希或名称的git stash show
非常不同。这是因为每个stash{n}
都引用了一个不合理合并的提交,但是gitshow
认为它是,并且显示它是错误的。另外,请注意,可以为stash指定一个名称。在这种情况下,您需要通过它的名称来引用,而不是默认的stash@{n}。它不会回答有关项
,而不是单个项
的问题。带有cut
的注释是正确的,但是来自Joshua()的答案(别名为for
)要好得多,它还跟踪了隐藏编号。这不会搜索隐藏中更改的代码。它搜索整个生成的工作树,包括隐藏的提交中未更改的文件。(因此,如果我以这种方式在我的存储中搜索“whatever”,那么每个存储都会显示相同的匹配行,这些匹配行来自相同的未触及的长文件)
stash@{43}:common/ot/whatever.js:exports.whatever = (foo, deps) => {
stash@{44}:common/ot/whatever.js:exports.whatever = (foo, deps) => {
git stash list -i -G<regexp>
git stash list -i -p -G<regexp>
[alias]
stashgrep = "!f() { for i in `git stash list --format=\"%gd\"` ; \
do git stash show -p $i | grep -H --label=\"$i\" \"$@\" ; done ; }; f"
git stashgrep -i <regexp>
% git stashgrep -i tooltip
stash@{5}: // resetBatchActionTooltip();
stash@{5}: addAcceleratorsAndTooltips(lToolMenu, lToolButton, iListener, iTool);
stash@{5}: private void addAcceleratorsAndTooltips(AbstractButton lToolMenu,
stash@{5}:+ String lToolTip = iTool.getToolTipText();
stash@{5}: lToolButton.setToolTipText(lToolTip);
stash@{20}:+ private static final String invalidSelectionTooltip = "Invalid selection. Please choose another.";
stash@{20}:- private final String invalidSelectionTooltip = "Invalid selection. Please choose another.";
stash@{20}: ((JTextField)lComponent).setToolTipText(