## git UI ### 2.8.4 git rev-parse ```bash git rev-parse --symbolic --branches # 显示分支 git rev-parse --symbolic --tags # 显示里程碑 git rev-parse --symbolic --glob=refs/* # 显示所有的引用 ``` `git rev-parse`可以将一个Git对象表达式表示为对应的SHA1哈希值 tag也分为两种,lightweighted tag和annotated tag ```bash git tag # lighteweighted tag git tag -a -m # annotated tag ``` 两种的区别在于轻量标签只会有commit对象 标记标签会自己生成一个对象,然后指向commit对象 所以下面的内容中,`git rev-parse`指令的参数A和A^0是不同的哈希 ```bash git rev-parse master refs/heads/master # 显示多个哈希 git rev-parse A refs/tags/A git rev-parse A^{} A^0 A^{commit} git rev-parse A^3 # ~ = ^ ``` ### git rm / git add -u / git rm --cached `git rm`会执行两个指令: 1. 删除文件(工作区中的) 2. 添加删除操作到暂存区 3. 有一个前提是文件必须已经被git所跟踪 `git add -u`是将工作区的已经被git跟踪的文件添加到暂存区,包括修改和删除 `git rm --cached`是将暂存区的移除出来,也就是让**Git停止跟踪文件**。也就是说如果文件之前已经在commit中,无论文件是否被修改,使用这个指令都能让Git停止跟踪文件 ### 2.8.4.2 git rev-list 作用主要是研究不同版本之间的范围,主要就是哈希值 ```bash git rev-list --oneline A git rev-list --oneline D F # 使用两个tag的并集 git rev-list --oneline ^G D # 排除这个版本和历史版本 等价于 git rev-list --oneline G..D # 连接两个版本 git rev-list --oneline B...C # 两个版本共同能够访问的除外 git rev-list --oneline B^@ # 提交的历史提交,自身除外 git rev-list --oneline B^! # 只看提交本身 ``` ### 2.8.4.3 git log 显示提交历史 参数代表版本范围 ```bash git log --oneline F^! D ``` **graph show** ```bash git config alias.glog "log --graph"# 用别名 git glog --oneline ``` 显示最近几条 ```bash git log -3 --pretty=oneline ``` 显示提交的具体改动 ```bash git log -p -1 ``` 显示变更概要 ```bash git log --stat --oneline I..C #显示版本I到C的变更概要 ``` 显示参数 ```bash git log --pretty=raw -1 # 显示提交的原始数据, git log --pretty=fuller -1 # 显示作者和提交者 git log --pretty=oneline # 提供最精简的日志输出 ``` 只是查看,分析某一次的提交,可以使用`git show`或者是`git cat-file`命令 ```bash git show D --stat # 展示里程碑D及其提交 git cat-file -p D^0 # 展示里程碑D及其提交 ``` ### 2.8.4.4 git diff ```bash git diff B A # 比较B和A里程碑 git diff A # 比较工作区和里程碑A git diff --cached A git diff git diff --cached git diff HEAD ``` ```bash git diff --word-diff ``` ### 2.8.4.5 git blame 可以追溯指出是谁在什么时候,什么版本引入的代码 ``` git blame git blame -L # 查看某几行 ``` ### 2.8.4.6 git bisect 用于二分查找什么时候引入的代码 ```bash git bisect start # 开始二分查找 git bisect bad # 设置当前版本为坏版本 git bisect good G # 设置里程碑G为好版本 git bisect reset # 结束 ``` 标记错误,恢复 ```bash git bisect log > logfile # 打开logfile,删除标记错误的行 git bisect reset git bisect replay logfile # 用logfile恢复进度 ```