Git:暂存区(git diff)

来源:互联网 发布:单片机堆栈在哪里 编辑:程序博客网 时间:2024/05/16 19:13

一、查看每次提交的文件变更统计 
gitlog --stat(查看每次提交的文件变更统计) 
图像
二、暂存区探索 
1.向welcome.txt文件中添加文本“Nice to meet you.”; 
2.查看工作区域和暂存区welcome.txxt文件的差异; 
图像
3.文件welcome.txt没有加入到暂存区,无法进行提交; 
4.查看提交日志,验证确实没有提交成功; 
图像
5.查看文件状态welcome.txt为工作区和暂存区修改状态; 
图像
6.将welcome.txt文件添加到暂存区; 
7.查看工作区和暂存区welcome.txt文件没有差异; 
8.查看暂存区和版本库welcome.txt存在差异Nice to meet you. 
图像
9.查看文件的状态,welcome.txt已经加入暂存区; 
10.注意到M的位置有变化,第一M标识版本库和暂存区有修改,第二个M标识暂存区和工作区有修改; 
图像
11.修改下welcome.txt文件,插入“Bye-Bye”; 
12.查看welcome.txt文件状态,该文件在工作区和暂存区有修改“Bye-Bye”,在暂存区和版本库有修改“Nice to meet you.”;  
13.查看文件精简状态,发现MM则如12所述有两个修改; 
图像
14.查看工作区和暂存区welcome.txt的文件差异“Bye-Bye.”; 
15.查看暂存区和版本库welcome.txt的文件差异“Nice to meet you.”; 
图像
16.通过--cached参数,查看暂存区和版本库中welcome.txt文件差异; 
图像
17.将暂存区的修改提交到版本库中; 
图像
18.查看提交日志,显示提交成功; 
图像
19.查看文件状态,只存在工作区和缓存之间的修改; 
20.查看工作区和暂存区,存在文件差异; 
21.查看暂存区和版本库,不存在文件差异; 
图像
三、git status原理 
1.查看文件的时间戳; 
2.查看文件的状态,.git/index/中的时间戳和本地文件一致,故没有修改; 
3.更新本地文件的时间戳; 
4.查看文件的状态,.git/index/中的时间戳和本地不一致,故在看内容是否修改,但是没有修改,故显示无修改状态; 
5.查看文件的时间戳,虽然文件的内容没有修改,但是时间戳不一样,故git status扫描的时候,更新的时间戳; 
图像
git status原理 
1.扫描工作区的时候,现依据.git/index文件中的记录的时间戳、长度等信息判断工作区文件是否改变; 
2.如果时间戳改变了,说明该文件的内容有可能改变,则打开文件,比较文件内容,与更改前的原始文件比较; 
3.无论文件内容是否更改,都会讲文件新的时间戳记录到.git/index中; 
git工作区扫描高效原因 
1.判断文件是否修改,使用时间戳和文件长度等信息进行比较比通过文件内容直接比较更快; 
四、工作区、版本库和暂存区原理 
1..git/index:包含文件索引目录,虚拟工作区,记录了文件名和文件的状态信息(时间戳和文件长度等); 
2..git/objects:.git/index文件索引建立了文件和对象实体之间的对应; 
3.工作区、版本库、暂存区原理图 
图像
    a.index的区域是暂存区,标记为master的是master分支代表的目录树; 
    b.工作区修改(或新增)的文件,执行git add命令时,暂存区的目录树将被更新,同时工作区修改(或新增)的文件内容会被写入对象库中的一个新的对象中,     该对象的ID被记录在暂存区的文件索引中; 
    c.执行git commit时,暂存区的目录树会写到版本库(对象库)中,master分支做相应的更新,即master最新指向的目录树就是提交时原暂存区的目录树; 
    d.执行get reset HEAD命令时,暂存区的目录树会被重写,会被master分支指向的目录树替换,但是不影响工作区; 
    e.执行git rm --cached <file>命令时,会直接从暂存区删除文件,工作区则不会做改变; 
    f.执行git checkout .或者git checkout --<file>命令,会用暂存区全部文件或指定的文件替换工作区的文件,这个操作很危险,会清除工作区中未添加到暂存区的改动; 
    g.执行git checkout HEAD .或git checkout HEAD <file>命令,会用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区的文件,这个命令也极具危险,不仅会清除工作区未提交的改动,也会清除暂存区中未提交的改动。 
五、git diff探索 
六、git diff命令
 
图像
1.gitdiff:工作区和暂存区的比较; 
2.Gitdiff --cached/gitdiff --cached HEAD:暂存区和HEAD的比较; 
3.gitdiff HEAD/gitdiff master:工作区和HEAD的比较; 
七、不要使用git commit -a 
1.对本地所有变更的文件执行提交操作,包括本地修改的文件和删除的文件,但是不包括未被版本跟踪的文件; 
2.丢掉Git暂存区该给用户对提交内容进行控制的能力; 
八、保存进度 
1.查看当前工作区的状态,暂存区保存了新的文件a/b/c/hello.txt和welcome.txt文件的修改,工作区修改了a/b/c/hello.txt; 
图像
2.保存当前的进度; 
3.工作区和暂存区的提交都不见了; 
图像

1 0
原创粉丝点击