git总结(3)历史穿越

git总结(3)

git历史穿越


历史穿越无非就是checkout reset rebase 的运用,在这之前先掌握 几个查看历史的命令才是明知之举。
查看历史提交git rev-list是个非常好用的命令:

rev-list 详解

##git rev-list 的简单用法
git rev-list --symbolic --branches ##查看所有分支
git rev-list --symbolic --tags ##查看所有里程碑
git rev-list --symblolic --refs/* ##查看所有引用对象
##说到里程碑,后面会有更详细的介绍,但目前至少要明白一个概念,还是举个例子说吧!假如有一个里程碑A
git rev-parse A ##获取的其实是里程碑对象的ID而不是它所对应的提交的ID
git rev-parse A^{commit}  A^0 A^{} ##这三种方式都可以获取里程碑A所对应提交的ID

git rev-parse A^{tree} A: ##可以获取对应的树对象的ID
git show HEAD{tree}  HEAD: ##可以查看对应的树对象 相当于 git cat-file -p HEAD{tree}

接下来说说查看历史提交的几个表达方式

###提交范围的表示和日志的格式化输出
    ##首先假设我们有ABCDEF5个里程碑对应一次对应5个提交
git rev-list B.. D ##表示 排除B和B的历史提交后D的历史提交有点绕但多读几遍就明白了。
git rev-list ^B.. D ##同上
git rev-list B...D ##这个是表示排除掉B和D都能访问的到历史,也就是排除他们的交集

git rev-list A^^^ git rev-list A~3 ##这两种表示法等价表示A的父提交的父提交的父提交
git rev-list A^3 ##表示A的第三个父亲 ,后面说道合并就懂了

git rev-list A^@ ##意味着排除自己
git rev-list A^! ##意味着提交本身,排除历史提交

git log -n ##代表显示几个
git log -L s,c ##s代表开始的位置,c表示显示的个数
##可以用上面的语法显示提交的范围
git log --graph ##在查看历史版本的时候可以查看分支图

git log -p ##显示日志的时候显示改动 输出信息量略大
git log --stat ##显示日志的时候显示改动,只显示哪些文件改了不显示改动内容
git log --pretty=raw ##显示提交所对应的原始数据就是commit,tree,parent,author,commiter等信息
git log --pretty=fuller##同时显示作者和提交者

接下来这个命令就比较有意思了,用户可以通过使用该命令查看两个文件,两次提交,版本库和暂存区,暂存区和工作区,工作区和版本库之间的差异。

git diff 命令详解

    git diff ##工作区和暂存区的不同
    git diff HEAD ##工作区和HEAD的不同
    git diff --cached [HEAD]##暂存区和HEAD的不同

    git diff B A ##B里程碑和A 里程碑之间的不同
    git diff <path> <path>##两个文件的差异

    ##git diff 可以加上参数 --word-diff 会逐词比较差异

查找bug

git 提供了一个二分查找的命令

git bisect start ##开始二分查找
git bisect bad ##标记当前版本为有bug版本
git bisect good <commit> ##标记一个没
git bisect reset ##结束二分查找
git bisect log > logfile ##将二分查找的详情导出
git bisect apply logfile ##应用已导出的二分查找详情

简单说下二分查找的用法:
1. 发现了bug
2. 那么开始二分查找吧 git bisect start
3. 如果是当前提交由bug 那么 git bisect bad 标记出当前版本为一个有bug的版本
4. 然后找出一个好的版本给出标记 git bisect good
5. 接下来系统会自动切换提交,用户只需要根据提示标识出该提交是否有bug
6. 最后系统会得出首次加入bug的地方

发现bug后呢?
追踪bug 是谁提交的 就用blame命令吧!

尾声

说了那么多版本的表示方法,最后总结下获取历史版本的一些命令,开始穿越吧:

动作命令格式示例
历史提交的目录树git ls-tree <tree-ish> <paths>git ls-tree HEAD README
整个工作区切换到历史git checkout <commit>git checkout HEAD^^
检出某文件的历史版本git checkout <commit> –<paths>git checkout HEAD^ –README
检出某文件的历史版本到其他文件名git show <commit> : <file> > new_namegit show HEAD^:README > welcome.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值