🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 版本表示法:git rev-parse --git-dir显示Git版本库的位置   --show-cdup显示当前工作区目录的深度  --parseopt解析命令行参数 ~~~ $ git rev-parse --symbolic --branches 显示分支 $ git rev-parse --symbolic --tags 显示里程碑 $ git rev-parse --symbolic --glob=refs/* 显示定义的所有引用。其中refs/remotes/目录下的引用称为远程分支(或远程引用) $ git rev-parse HEAD 显示HEAD对应的SHA1哈希值 $ git rev-parse A^{tree} A: 显示里程碑A对应的目录树 $ git rev-parse A^{tree}:src/Makefile A:src/Makefile 显示树里面的文件 $ git rev-parse :/"commit A" 通过在提交日志中查找字串的方式显示提交 ~~~ #### 版本范围表示法:git rev-list 一个提交ID实际上就可以代表一个版本列表,含义是该版本的所有历史提交 $git rev-list --oneline A 两个或多个版本,相当于每个版本单独使用时指代的列表的并集 在一个版本前面加上符号^含义是取反,即排除这个版本及其历史版本 ^G D等价于G..D ...表示法含义是两个版本共同能访问到的除外 B^@表示某提交的历史提交,自身除外 B^!表示提交本身不包括其历史提交 #### 浏览日志:git log 后面可以接表示版本范围的参数(如上git rev-list) --graph参数可以显示字符界面的提交关系图,而且不同的分支可以用不同的颜色表示 -<n>显示最近的n条日志 -p可以在显示日志的时候同时显示改动 当不需要知道具体的改动而只想知道改动在哪些文件上时可以使用--stat参数 --pretty=raw显示commit的原始数据,可以显示提交对应的树ID --pretty=fuller同时显示作者和提交者,两者可以不同 --pretty=oneline提供最精简的日志输出,也可以使用--oneline参数 如果只想查看和分析某一个提交,也可以使用git cat-file(-p参数的含义是美观的输出)或git show命令 #### 差异比较:git diff ~~~ $ git diff B A 比较里程碑B和里程碑A $ git diff A 比较工作区和里程碑A $ git diff --cached A 比较暂存区和里程碑A $ git diff 比较工作区和暂存区 $ git diff --cached 比较暂存区和HEAD $ git diff HEAD 比较工作区和HEAD $ git diff <commit1> <commit2> -- <paths> 显示不同版本间该路径下的文件差异 $ git diff <path1> <path2> 可以在Git版本库之外执行,对非Git目录进行比较 $ git diff --word-diff 逐词比较 ~~~ #### 文件追溯:git blame 在软件开发过程中当发现bug并定位到具体代码时,可以指出何时和什么版本引入的此bug。 当针对文件执行git blame命令时,就会逐行显示文件,在每一行的行首显示此行最早是在什么版本引入的,由谁引入的 如果只想显示某几行,使用-L n,m参数 #### 二分查找:git bisect ~~~ $ git bisect start 开始二分查找 $ git bisect bad A 将A版本标记为坏提交 $git bisect good 将当前版本标记为好提交 $ git checkout bisect/bad 切换到最终定位的坏提交版本 $ git bisect reset 当对bug定位和修复后,撤销二分查找在版本库中遗留的临时文件和引用。撤销二分查找后,版本库切换回执行二分查找之前所在的分支 ~~~ **如果把好提交当成了坏提交:** ~~~ $ git bisect log > logfile 把二分查找的日志保存在一个文件中,编辑这个文件,删除记录了错误动作的行。 $ git bisect reset 结束正在进行的出错的二分查找 $ git bisect replay logfile 通过日志文件恢复进度,重启二分查找 ~~~ **自动化测试:** 支持run子命令,可以运行一个自动化测试脚本,实现自动的二分查找。若脚本退出码为0,正在测试的版本是一个好版本;退出码为125,正在测试的版本被跳过;退出码为1~127(125除外),正在测试的版本是一个坏版本 测试脚本good-or-bad.sh,步骤如下: ~~~ (1)$ git bisect start master G 从已知的坏版本master和好版本G开始新一轮的二分查找 (2)$ git bisect run sh good-or-bad.sh 自动化测试 (3)$ git describe refs/bisect/bad 显示定义到的坏版本 ~~~ #### 获取文件历史版本命令: ~~~ $ git ls-tree <tree-ish> <paths> 查看历史提交的目录树 $ git checkout <commit> 整个工作区切换到历史版本 $ git checkout <commit> -- <paths> 检出某文件的历史版本 $ git show <commit>:<file> > new_name 检出某文件的历史版本到其他文件名 ~~~