Git管理的是修改而非资源本身
Git为什么被称为最好的分布式项目管理系统
Git跟踪并管理的是修改,而非文件。
场景举例:
创建文件read.txt
--->添加到暂存区git add read.txt
--->此时在对read.txt
文件进行修改--->直接commit
此时查看暂存区状态:
git status
此时发现第二次修改文件的内容并没有被提交到版本库当中,而是存在暂存区当中
注意:
- 此时的修改发生在工作区而不是暂存区
git
记录了本次修改而不是工作区修改后的文件本身
如何再次提交修改:
再次添加文件git add
--->再次提交git commit
在第一次提交之前再次添加修改的内容:
第一次修改 ---> git add
-- -> 第二次修改 ---> git add
-- -> git commit
比较工作区和最新版本的区别
git diff HEAD -- 某个文件完整名称
总结
- 对于已经在暂存区的文件进行的修改不会被
commit
到master
分支上 - 通过
git status
查看的是修改这个动作 - 如果是第一种情况此时的暂存区是干净的
撤销修改
特点:
由于git
是对修改进行管理。所以需要注意这里的撤销修改有两种
- 撤销在工作区的此次修改行为
- 将暂存区的该文件的修改行为撤销掉。放回工作区
撤销修改还由于文件的是否存在暂存区而导致撤销的结果不同
当文件未曾添加到暂存区
撤销指令:
git checkout -- 文件名称1 文件名称2 ...
将文件回滚到和版本库一模一样的状态
文件已添加到暂存区
将暂存区的修改拿出来放回工作区:
git reset HEAD 文件名
git reset HEAD <file>
#回退版本的本质是修改head指针指向
git reset --hard HEAD~100
reset
参数可以回退版本也可以回退暂存区的修改。这里需要注意的就是参数的使用
此时在使用git status
查看暂存区的状态就是空的了
总结
git
的指令不多。主要是通过参数去控制究竟是进行什么操作--->git checkout --
和git reset HEAD <file>
- 时刻注意此次修改位于什么位置在进行对此次修改的操作
- 此时这些的推送并没有真正的发生到远程仓库的主分支上。如果不小心将不需要的修改移除则可以使用版本回退
git reset --hard HEAD
回退到之前版本。只要这个版本还没有推送到远程
删除文件
对于工作区而言进行的删除操作
rm <file>
此时文件只是在工作区删除了。版本库还有。并且此时提交会发生冲突检测到工作区和版本库不一致
此时可以对文件进行回滚。因为版本库当中还有该文件
git checkout -- <file>
对于工作区和版本库一起进行的删除操作
git rm <file>
此时版本库的文件和工作区的文件都删除了。无法对该文件进行回滚
总结
git
的删除要依据情况来看。删除工作区、删除工作区和版本库- 工作区删除可以
checkout
,工作区和版本库一起删除不可以恢复