接下来的内容能帮你深入了解工作区,暂存区,master分支之间的关系以及它们之间互相的撤回操作
1、git diff
目前为止,你已经知道了git add命令可以将工作区的内容添加到暂存区用以跟踪该文件的改动,git commit是将暂存区的内容同步到master分支,是不是果真如此呢,可以用git diff命令验证这个结论
——15分钟
$ git diff -- readme.txt //查看工作区与暂存区的差别
$ git diff HEAD -- readme.txt //查看工作区与master分支的差别
$ git diff --cached -- readme.txt //查看暂存区与master分支的差别
假设你的仓库现在是干净的,也就是工作区,暂存区以及master分支的内容全部同步完毕,而工作区里的readme.txt的内容为两行乱码
然后你分别输入以上三行命令
你发现什么结果也不返回,这是正常的,因为三个地方的内容没差别
接下来你需要做三件事情
一、将两行乱码删除,只输入3,add并commit
用以上三个命令查看
提示:这个地方三个区一致,都是3
二、将3修改为2,只add不commit
用以上三个命令查看
提示:这个地方工作区和暂存区一致,master分支不一致
工作区,暂存区是2,master分支是3
三、将2修改为1,既不add也不commit
用以上三个命令查看
提示:这个地方工作区,暂存区,和master分区均不一致
工作区是1,暂存区是2,master分支是3
命令结果解析见下一篇
接下来是他们之间的撤回操作,很简单,理解了就会使用 ——1分钟
2、 git checkout -- 和 git reset HEAD
具体用法
$ git checkout -- readme.txt //暂存区的readme.txt内容覆盖工作区
$ git reset HEAD readme.txt //master分支当前位置的readme.txt内容覆盖暂存区
git checkout命令中的--(两条杠)不能丢,因为没--的话这个命令就会变成其他作用,之后的文章会说明(用于切换分支)
git reset之前就见过了,也能用于回退版本,这里介绍的是用于单一文件的情况
假设你经过实践后,领悟到了其中的内涵,那么请你解决下列几种情况 ——5分钟
一、假设你在一次commit后又对工作区的文件readme.txt进行了修改,然而你想撤销这个修改
二、假设你在一次commit后对工作区的文件readme.txt进行了修改,git add了之后又修改了一次,你想撤销到第二次修改之前
三、假设你在一次commit后对工作区的文件readme.txt进行了修改,git add了之后又修改了一次,你想撤销到第一次修改之前
四、你不小心完全删除了一个文件,无法通过操作系统找回,而你想恢复它
五、你修改了一个文件,不仅add,而且还commit了,你想撤销这个修改
如果你能顺利完成以上操作,那么你可以对这些概念有比较深的了解了,实在不知道怎么做的,可以看另一篇解析
最后介绍这个命令 ——30秒
3、git rm
$ git rm readme.txt
用于删除readme.txt这个文件,删除了之后要commit一次,之后可以用git reset找回
$ git rm --cached readme.txt
将暂存区中的readme.txt删除,工作区的不会改变