三分钟教你学Git(十五) - 搜索

1. 空间维度搜索,我们发现经常有需求是想找到某个函数在哪些文件里出现过。

git grep

在当前working directory下搜索含有某个字符串的文件,要显示行号可以使用-n参数。

# git grep -n hongchang

zhc.conf:1:hongchangfirst

只显示包含的文件和其包含的个数可以使用--count参数。

# git grep --count hongchang

zhc.conf:1

记住git grep搜索的区域是当前HEAD所生成的连通分量,还有working区和staging区。你也可以指定其他的节点所生成的连通分量,比如

git grep -n hongchangfirst 3b7d6a13083f9cd826a7963ec8ea2053e66d4bc7

2. 时间维度搜索,有时候我们还像知道某个变量是在哪一次提交引入的,可以使用log的-S参数。

git log -Shongchangfirst

这样就把所有修改它的commit列了出来,最开始的一个commit就是引入它的commit。

还可以使用-L参数告诉Git尝试匹配成函数,如:

git log -L :initialize_zhc_db:zhc_db.c

冒号中间的是你想查看的函数名,冒号后边的是限制在某个文件内的函数,这样Git会把关于这个函数的所有修改历史列出来。

原文:http://blog.csdn.net/hongchangfirst/article/details/45391691

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst

时间: 2024-10-08 15:24:52

三分钟教你学Git(十五) - 搜索的相关文章

三分钟教你学Git (十) - bad object HEAD错误

有时候进入到Git仓库执行命令: git status 显示: fatal: bad object HEAD 直接: git pull origin hongchangfirst 将远程分支的内容重新sync下来即可. 原文:http://blog.csdn.net/hongchangfirst/article/details/45312317 作者:hongchangfirst hongchangfirst的主页:http://blog.csdn.net/hongchangfirst

三分钟教你学Git(十六) - 统计

有时候想统计仓库的情况,比如代码量,贡献者之类的. 1 统计某人的commit数量 git log --author="$(git config --get user.name)" --oneline | wc -l 2 统计某人的代码量 git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | awk '{adds += $1; subs += $2; all +=

三分钟教你学Git(十四) 之 线下传输仓库

有时候还有一个人不能从远程直接clone仓库或者说由于非常大,clone非常慢或其他原因.我们能够使用bundle命令将Git仓库打包,然后通过U盘或者是其他介质拷贝给他,这样他拿到打包好的仓库后能够unbundle成仓库,达到了共享的目的,这样有时候是非常方便的. 我们看看详细怎么做: 首先我们进入仓库.git status一下看看当前的仓库状态. 然后開始打包: git bundle create zhc.bundle HEAD master Counting objects: 6, don

三分钟教你学Git(十二) 之 fast-forward

什么是fast forward, 顾名思义,就是快速向前进,Git怎么做到快速的呢? 原来如果Git判定可以fast forward的时候,直接修改当前HEAD指针的指向然后再修改当前HEAD指针,说白了就是修改两个指针的指向,而并没有生成新的commit对象. 所以当你修改了其中的一个branch中的某个commit的时候,另一个branch如果也引用了此commit,则这个branch会很意外的出现变化,因为引用的是同一个commit对象. 所以一般有几种方法: 1 --no-ff 显示告诉

三分钟教你学Git(十八) - 重写历史

git filter-branch 允许你使用一个单一命令来大范围地更改历史.所以这个命令要慎用. 1假如你想对所有的commits删除一个文件. git filter-branch --tree-filter 'rm to_be_deleted_file' HEAD 2 假如你想删除某些message中的某些以cr开头的行. git filter-branch --msg-filter ' sed -e "/^cr: /d" ' 3 将仓库变成以new_home目录为项目父目录.--

三分钟教你学Git (四)之紧急救助

如果你不小心git reset --hard HEAD^ 然后这个commit又没有在别的git仓库中,怎么办?是不是这次修改就丢了呢? 当然不是,git为我们每次都历史都保留了reference log 如下: $ git commit -A -m "hongchangfirst commit" 你现在看git的历史记录,你可以看到两次提交: $ git log * d1f3fg5 (HEAD, master) hongchangfirst commit 现在让我们来重置回第一次提交

三分钟教你学Git (一)之技巧

先来看看几个比较有用的技巧 git stash 将工作区中的状态保存到栈中,供以后apply/pop.可以把它理解为一个commit,但是是存在另一个仓库里的. git reset --hard 将暂存区,工作区,版本库都恢复到某一次提交的状态 --soft 暂存区和工作区都不变,只改变版本库的状态 --mixed (默认) 将版本库和暂存区都改变,不改变工作区 如果在commit之后进行push,发现别人在你之前做了push,这时应该怎么办呢? git reset --mixed HEAD^

三分钟教你学Git (一)之模型

Git是版本控制工具,类似于SVN的作用.这里就忽略掉怎么安装之类的,只讲解Git最重要的思维模型.这三个概念一定要清楚: 1 工作区(Working Area) 2 暂存区(Stage) 3 版本库(repository, 本地仓库和远程仓库) 工作区很简单,就是你修改代码时会立即体现的地方. 暂存区是Git的特色之一,这个概念不好理解,这里举一个例子说明.如我们领到了一个任务,任务是修改两个bug.你可以把这两个bug分开提交,也可以合并到一次提交上.假如我们需要合并到一次提交时而我们又没有

三分钟教你学Git(二)之命令索引

记住这三个概念,工作区(Working Area),暂存区(Stage),版本库,通过add,工作区的变化到暂存区,通过commit暂存区的变化到本地版本库,通过push本地版本库的变化到远程版本库.下面是常用的命令. 保存进度恢复工作进度 #把工作区和暂存区的内容保存到进度列表里 git stash save "description" #列出stash里的所有项 git stash list #把进度恢复出来并删除进度列表中的项 git stash pop #只把进度恢复出来,不删