版本: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 检出某文件的历史版本到其他文件名

git 版本历史的更多相关文章

  1. redmine整合GIT版本库

    redmine整合GIT版本库   服务器的环境: Ubuntu 11.10 64位 Redmine 1.4.5.stable.10943 git version 1.7.5.4 + gitolite ...

  2. 详解在Visual Studio中使用git版本系统[转]

    这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了 ...

  3. Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)

    简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...

  4. 详解在visual studio中使用git版本系统(图文)

    很多人已经在使用git(或正在转移到git上),在github.com上,也看到园子里不少同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github. ...

  5. 在visual studio中使用git版本系统(zz)

    第一部分: 安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了,图形化工具(无论是 git extentions ,还是TortoiseGit),都只不 ...

  6. GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

    最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮 ...

  7. Git 版本回退问题详解

    版本回退 git log    ,  git reset --hard xxxx回退到以前的版本 git reflog,  git reset --hard xxx 回退到将来的版本 现在,你已经学会 ...

  8. 新手向--git版本控制器

    body { width: 70%; border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto } body .mar ...

  9. Git版本切换

    前面的话 本文将以一个简单实例的形式来介绍Git版本切换 初始版本 首先,在一个自定义的位置,创建目录a,比如在D盘下 [注意]本文会用到一些常用的Linux的Shell命令,详细信息移步至此 先使用 ...

随机推荐

  1. Vijos P1062 迎春舞会之交谊舞

    题目链接:https://vijos.org/p/1062 题意:输入n(n <= 1500)个女生左边有多少个男生.每个女生都和她左边最近的男生跳舞. 输出每个女生到可以与之跳舞的男生之间有几 ...

  2. 10 Best Responsive HTML5 Frameworks and Tools

    http://designinstruct.com/roundups/html5-frameworks/

  3. noj [1480] 懒惰的风纪委Elaine (多重背包)

    http://ac.nbutoj.com/Problem/view.xhtml?id=1480 [1480] 懒惰的风纪委Elaine 时间限制: 1000 ms 内存限制: 65535 K 问题描述 ...

  4. javascript pattern

    bing:javascript pattern baidu:module pattern javascript高级程序设计 姊妹篇:ajax高级程序设计 http://wenku.baidu.com/ ...

  5. Error -27791: Server xx has shut down the connection prematurely

    最近在进行一次性能测试中遇到一个问题,并发较大的时候会出现LR出现Error -27791: Server xx has shut down the connection prematurely的ER ...

  6. easyui源码翻译1.32--panel(面板)

    前言 昨天发布了表格datagrid的翻译源码 ,easyui的许多插件有依赖关系  比如datagrid 的渲染需要panel.resizable.linkbutton.pagination   今 ...

  7. Joda-Time

    任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径.使用 JDK 完成这项任务将非常痛苦和繁琐.现在来看看 Joda Time,一 ...

  8. Visual Studio原生开发的10个调试技巧(转)

    本文由 伯乐在线 - JingerJoe 翻译自 Marius Bancila.转载请参见文章末尾处的要求.   [感谢@_La_Isla_Bonita 的热心翻译.如果其他朋友也有不错的原创或译文, ...

  9. 【HDOJ】1171 Big Event in HDU

    母函数,先要算搞清楚组合数可能的最大值.非常大.N种设备的最大VAL*最大数量. #include <stdio.h> #include <string.h> #define ...

  10. simplified build configuration

    http://blogs.msdn.com/b/saraford/archive/2005/08/16/452411.aspx Did you know… That you can hide the ...