1. add和commit补充
文件修改后首先要add添加到暂存区,commit提交的是暂存区里面的内容,但是并不会清空暂存区
接下来就来重新认识一下昨天的git dif**f和**git diff –cached的区别
不加–cached代表比较的是工作区和暂存区中代码的区别
加了后代表比较暂存区和分支(已提交的)代码的区别
用例子实际来看一下:
文件已经做了更改
由于修改后的文件并没有添加到暂存区,所以暂存区的文件和分支上是相同的,所以加–cached无反应
同时工作区代码修改了,和暂存区就有区别了,所以会显示出被修改的部分
add以后暂存区和工作区同步,就会显示出暂存区和分支上的不同了
同时提醒,修改文件后一定要先add到暂存区再commit,因为你修改的文件并不会从工作区默认添加到暂存区,而commit只会提交暂存区的内容
2. 撤销修改
1. 如果修改了工作区的代码,发现有问题,想回复到修改前怎么办(尚未add到暂存区)?当然可以自己手动一行行删除,但是如果你忘记修改前的部分都是哪些或者修改部分太多怎么办?尝试git checkout
我们git diff 发现我们写了错误的代码,想要回复到上一次add前的代码,在使用git status时系统已经提示使用git checkout 了,使用以后发现修改被撤销,文件恢复成了上一次成功add时的样子
会使用暂存区的文件覆盖工作区的该文件
如果add了以后并未提交,想撤销修改怎么办
使用git reset HEAD file (和撤销commit差不多,不过是当前指针HEAD)
这时该文件提交到暂存区的动作被撤销了,但是工作区的代码并没有发生变化分支上的代码会覆盖掉暂存区,但是不影响工作区
3. 删除文件
命令
git rm fileName
,然后git commit永久删除一个文件(文件从版本库中也被永久删除)使用linux下使用rm命令或者Windows下右键(delete)删除的文件,可以使用git checkout – fileName恢复
重要的一点是checkout 是使用暂存区去恢复工作区
而像reset则是用分支去恢复,你使用git rm删除文件的时候,会先执行rm,同时会把文件命令记录提交到暂存区,再commit就会永久删除了(会删除文件版本库里面的内容),此时使用checkout是没有意义的,因为暂存区也没有相应的内容了,这时只能回滚版本库信息。
总结:rm或者右键误删使用checkout
git rm前并未提交 reset到HEAD,使用版本库内容覆盖暂存区
git rm 后并提交 回滚版本库
后面这两种情况回滚后工作区、暂存区、分支三区上的该文件内容是相同的