学习使用图形化的方式查看提交历史,调查提交之间、分支之间或者甚至你的工作目录、暂存区和存储区之间有哪些变更。
本节 Git 命令概览
git log # 列出“当前分支”中的所有提交
# 💡 最后一个提交在最上面,后面是它的父提交,依此类推
查看提交历史记录
git log # 列出“当前分支”中的所有提交
# 💡 最后一个提交在最上面,后面是它的父提交,依此类推
提交除了存储所提交变更的一个指针,还会存储一组元数据,git log
就是简单地列出了所有提交的元数据所包含的信息。
控制输出格式-截短 ID
git log --abbrev-commit
--abbrev-commit
标志只显示足够多的字符。
忽略作者和日期
git log --pretty=oneline
pretty
标志有一个内置的格式化选项:oneline
,可以针对每个提交只显示一行简化的信息。(格式化选项还可以自定义)
以上两个标志可以结合使用:
git log --pretty=oneline --abbrev-commit
--pretty=oneline --abbrev-commit
这些标志的顺序不重要。
组合
因为这两个组合经常会被用到,Git 提供了一个快捷方式表示这两个标志的组合:--oneline
标志。
git log --oneline
# git log --pretty=oneline --abbrev-commit 的简写
查看所有分支的提交记录
假设现在有两个分支 branch-a
和 branch-b
,因为 HEAD 标记此刻在提交 C 上,因此此时 git log
将输出 C>B>A
的提交记录信息。
查看当前所在分支:
branch-a 分支上的日志:
使用标志 --all 查看所有分支的提交记录。
git log --oneline --all
现在 master、branch-a 和 branch-b 的提交记录都会被列出来。
但上面有的提交信息无法直观地表达出其所属的分支,此时可以使用 --graph 标志用图形化的方式显示提交分支结构。
git log --oneline --all --graph
查看文件差异
前提:只加当文件的状态是已被跟踪时,在修改文件后,才能检查修改的文件与暂存区的快照有哪些差异。
git diff # diff 是 difference 的简写
如果修改了工作目录中的某些文件内容,但修改的内容还没有添加到暂存区,此时就可以使用上面的命令进行比较。
如果修改了多个文件及有多处修改,该命令会列出所有文件的所有修改差异。
不过 Git 会将这些差异按区块一个一个列出来,而不是将所有差异一股脑儿地展示在你的眼前❗
按单词显示差异
git diff
默认会列出行上的差异。
git diff --word-diff
红色文本:方括号中的文本表示旧的文本;绿色文本:花括号中的文本表示新的文本。
⭐ 我更喜欢这样的差异对比方式,不仅节省空间,而且更醒目。
暂存快照与提交快照的差异对比
提前:如果工作目录中所有的修改内容都已经添加到暂存区,此时使用 git diff
是不会有任何输出的。(因为此时工作目录的状态与暂存区的状态是一样的)
但暂存区的新增快照还没有提交到存储区,此时可以将暂不区与存储区进行差异比较。
git diff --cached
# 语法二
git diff --staged
# --cached 和 staged 作用是一样的
💡 cached 表示已缓存的,staged 表示已被跟踪的,这两个状态只能发生在暂不区或存储区,因此这两个标志对比的就是暂存区和存储区。
比较分支差异
前提:假设现在要将 branch-b 分支合并到 master 分支上,那首选要切换到 master 分支❗
git switch master
git diff master branch-b # 参数一表示目标分支(即当前所在的分支),参数二表示源分支(即用于比较的分支)
目标分支:一般表示要合并时的集成分支;
源分支:一般表示合并到集成分支时的来源。(这总叫法可以用在分支差异比较时的视角)
💡 需要注意的是:当比较两个分支的差异时,比较的是分支指向的两个提交(这是两个存储区)。
💡 想你中一下,如果此时切换到 branch-b 分支,使用 git diff branch-b master 将看到什么的结果?
只提到一个分支名时...
前提:假设现在在 master 分支。
git diff branch-b
如果提供的参数是 branch-b
,最终的结果是:将 branch-b 分支当成目标,将当前工作目录当成源,显示的表达即 👇
git diff branch-b <word-dir>
如果 master 分支上的工作树是干净的。此时的表达结果也等于 👇
git diff branch-b master (此时的工作目录状态与存储区的状态是一致的)
查看两个指定提交的差异
git diff target-id source-id
在输入差异信息时,a 和减号表示的是目标提交,b和加号表示的是源提交。如下图:红色有减号的文本表示目标提交里的内容信息,绿色加号的文本表示源提交里的文本信息。
一定要分清比较的目标与源:git diff target-id source-id
如果将目标和源把过来,结果如下 👇
👀 考虑:如果新建一个文件后,使用 git diff --cached
将会是什么结果?