%%
# 纲要
> 主干纲要、Hint/线索/路标
# Q&A
#### 已明确
#### 待明确
> 当下仍存有的疑惑
**❓<font color="#c0504d"> 有什么问题?</font>**
# Buffer
## 闪念
> sudden idea
## 候选资料
> Read it later
%%
# 查看工作区状态——git status
![[_attachment/05-工具/git 使用/git 使用.assets/IMG-git 使用-47B3CE223AF8D6E922B39791794B3B3D.png|398]]
`git stauts [options]`:
- `-s`:简短格式输出。文件前的标记含义如下:
- `??`:未跟踪的文件。
- `A`:已添加到暂存区的新文件;
- `M`:已修改的文件(红 M 表示有删除行,绿 M 表示新增行)
- `D`:已删除的文件
- `-b`:显示当前**分支名称**和**分支状态**(如**与上游分支的差异**)
- `--show-stash`:显示**与当前分支关联的 stash**(若存在),供快速查看是否有任何未应用的 stash
![[_attachment/05-工具/git 使用/git 使用.assets/IMG-git 使用-B9C9AAD0FE198EC6E8200B3D22116F9C.png|375]]
<br>
# 查看提交历史——git log
`git log [options] [revision range]` :查看**自指定提交(默认 HEAD) ==向后追溯可达==的提交历史**
选项参数:
- `<revision range>`:单个提交,多个独立提交,或者**提交范围**例如 `commit1..commit2`
- `^commit` 表示由该提交 "**不可追溯到达**" 的提交
- `--all`:显示**所有分支的提交历史**(包括**远程跟踪分支**)
- `--follow <file>`:显示 **==某个文件==的历史变更记录**,包括该文件在重命名后的历史。
- `--oneline`:每个提交用一行显示(省略提交者、日期)
- `--graph`:显示**图形化表示的分支合并历史**(分支图读法参见[^3]),通常与 `--oneline` 搭配
- `--merge`:
- `--reverse`: 颠倒日志的显示顺序,从最旧的提交开始显示。
- `--pretty=<format>`:指定**输出格式**,可选项有:
- `online`:每个提交用一行,显示**简短哈希值和提交消息**;
- `short`:显示提交哈希值、作者和提交消息。
- `medium`:显示提交哈希值、作者、提交日期和提交消息(默认格式)。
- `full`:显示完整的提交信息,包括作者和提交者的详细信息。
- `format:"..."`:自定义输出格式,例如 `--pretty=format:"%h - %an, %ar : %s"`
- 显示详细变更内容:
- `--stat`: 显示每次提交的**统计信息**(**发生修改的文件** & **文件修改的行数**)
- `--name-only`:显示每个提交中**更改的文件列表**;
- `--name-status`:显示每个提交中**更改的文件列表** & **文件变更状态**(新增 A、修改 M、删除 D)。
- `-p`:显示每个**提交引入的差异(patch)**。对于每个提交,显示**详细的代码改动**。``
- 限制范围:
- `--author=<pattern>`:只显示**指定作者**的提交(可指定**部分名称**或基于**正则匹配**)
- `--grep=<pattern>`:只显示**提交消息**中**匹配指定模式**的提交
- `-n <limit>` :显示最近 `limit` 条提交记录
- `--since=<date>` 或 `--after=<date>`:只显示自指定日期之后的提交
- 例如 `git log --after="2024-01-01"`
- `--until=<date>` 或 `--before=<date>`:只显示在指定日期之前的提交。
- 例如 `git log --until="2024-01-01"`
### 使用示例
```shell
# 列出所有属于A分支但是不属于B分支的提交
git log <branchA> --not <branchB> # 等价于 `git log <branchA> ^<branchB>`
# 列出所有可由 foo、bar 追溯到,但不能由 `baz` 追溯到的提交历史
git log foo bar ^baz
# 列出HEAD不同于origin的提交历史
git log origin..HEAD # 等价于git log HEAD ^origin
# 查看某个文件的详细历史记录,包括重命名前的记录
git log --follow -p -- <file>
# 显示所有分支的简洁提交历史
git log --all --oneline --decorate --graph
```
### 选项说明
`--oneline` 显示:
![[_attachment/05-工具/git 使用/git 使用.assets/IMG-git 使用-C70491864FE0B3BA2E7B1D53169FE2C9.png|468]]
![[_attachment/05-工具/git 使用/git 使用.assets/IMG-git 使用-15F0A24EDAE6D8132F7EA2170A530D97.png|560]]
`stat` 显示:
![[_attachment/05-工具/git 使用/git 使用.assets/IMG-git 使用-A41FF691A6C99B8C7DD68F4DA219FF97.png|463]]
`--graph` 显示:
![[_attachment/05-工具/git 使用/git 使用.assets/IMG-git 使用-5C1B5ABD33E70B9F9C3034BD742DF61B.png|483]]
> [!caution] --graph 显示的历史合并历史,**对同一分支是按照时序排列,但不同分支之间不是**
>
> ![[_attachment/05-工具/git 使用/git 使用.assets/IMG-git 使用-09D00D719B9B8523CD9BD8489C9D6E89.png]]
<br><br>
# 查看提交的详细内容——git show
`git show [<options>] [<object>...]`:查看**指定 git 对象**的详细信息
- `<object>`:可以是 blobs,tree,tags,commits;
- `<commit>:<path>`:查看指定提交中的**指定文件或目录的内容**(需给出**相对于`.git`的路径**)
- `--stat`: 显示提交的**统计信息**(**发生修改的文件** & **文件修改的行数**)
- `--name-only`:显示提交中**更改的文件列表**;
- `--name-status`:显示提交中**更改的文件列表** & **文件变更状态**(新增 A、修改 M、删除 D)。
使用示例:
```bash
# 查看HEAD的详细信息
git show
# 查看最近一次提交中`example.txt`的文件内容
git show HEAD:example.txt
# 显示指定提交中某个文件的内容
git show <commit>:<filepath>
# 显示某次提交发生变化的文件
git show --name-only [commit]
```
> [!example]
>
> ![[_attachment/05-工具/git 使用/git 信息查看.assets/IMG-git 信息查看-FA025660C5309F5687F81837E1B6B0DA.png|483]]
>
>
<br><br>
# 参考资料
# Footnotes