1、查看提交(commit)日志:git log
看到每次提交的文件变更统计: --stat git log --stat
精简输出日志:--pretty=oneline git log --pretty=oneline
2、查看文件状态: git status
精简格式的状态输出:-s git status -s
3、git diff
不带任何选项和参数:显示工作区的最新改动(即工作区与提交任务(暂存区,Stage)相比的差异)
工作区和HEAD(当前工作分支):git diff HEAD
提交暂存区和版本库:git diff --cached
4、撤销工作区中测未提交的修改:git checkout -- <file> git checkout -- welcome.txt
5、git status (git diff)扫描工作区改动的时候。
git判断文件有没有改变:先比较文件的时间戳、文件大小,再比较文件内容。
先依据.git/index文件中记录的(用于跟踪工作区文件的)时间戳、长度等信息判断工作区文件是否改变,如果工作区文件的时间戳改变了,说明文件的内容可能被改变了,
需要打开文件,读取文件内容,与更改这前的原始文件相比较,判断文件内容是否被更改。如果文件内容没有更改,则将该文件新的时间戳记录到.git/index文件中。
.git/index 虚拟工作区的目录树(文件名和文件状态信息)
.git/objects 文件内容
文件索引:建立了文件和对象库中对象实体之间的对应
6、工作区、暂存区、版本库目录相对浏览:
版本库目录权:
git ls-tree -l HEAD
显示文件的大小:-l
100644 blob a11790e8c69269e02e04f141bc00c9f94b79b99d 10 README.md
输出内容:
100644):文件的属性(rw-r--r--)
blob :git对象库中的一个blob对象(文件)
a11790e8c69269e02e04f141bc00c9f94b79b99d:文件在对象库中对应的ID
清除工作区中没有加入版本库的文件和目录(非跟踪文件和目录):git clean -fd
用暂存区内容刷新工作区 git checkout .
暂存区目录树:
git ls-files -s
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 testthree.txt
0 暂存区编号
针对暂存区便用 git ls-tree
先把暂存区的目录树写入git对像库: git write-tree
写入对象库中的TreeID :0f0f267c5bad5f73942a77580a6eb4af24daa425
然后 git ls-tree -l 0f0f26
040000 tree 1e4f7e68a173bb0f1e36b70d48436412f3fdac00 - a (tree树对角,一级目录a)
100644 blob ce013625030ba8dba906f756967f9e9ca394464a 6 testone.txt
对本地所有变更的文件执行提交操作,包括对本地修改的文件和删除的文件,但不包括未被版本库跟踪的文件:git commit -a (不要使用,因为会丢掉Gi暂存区带给用户的最大好处:对提交内容控制的能力)
暂存状态:git stash