git-learner/notes/2.8-git-gui.md
2024-08-20 22:30:49 +02:00

153 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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 <tagname> # lighteweighted tag
git tag -a <tagname> -m <message> # 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 # ~<n> = <n> ^
```
### 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 <filename>
git blame -L <n,m> <filename> # 查看某几行
```
### 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恢复进度
```