git add . 暂存区的目录树会更新,同时将工作区修改或新增的内容写到了对象库一个新对象,该对象的ID被记录在暂存区的文件索引中,工作区后续的add 和 暂存区后续的commitf都更新到这个id对应的对象中
git commit 暂存区的目录树写入对象库,head指向新的暂存区的那个目录树。(简单理解:将暂存区的内容更新到对象库中,并且会备份一个该对象,用HEAD指向这个备份)
git checkout -- 文件名 撤销工作区中文件尚未提交的修改。 实质:只是将暂存区的内容覆盖到了工作区。
git rm --cached 文件名 会将暂存区的指定文件删除,工作区不受影响
git reset HEAD 会将HEAD指向的备份全部重写到暂存区,工作区不受影响
git checkout HEAD . 或 git checkout HEAD 文件名 会HEAD的覆盖到工作区和暂存区。所以工作区没有commit内容会被清除
-------对比
git diff 用于工作区与暂存区的比较
git diff HEAD 或 git diff master 用于工作区与 HEAD比较
git diff --cached 或 git diff --cached HEAD 用于与暂存区与HEAD比较
-----重置 HEAD游标的控制
git reset HEAD^ 将HEAD指向的目录树恢复到暂存区,工作区不影响
git reset --soft HEAD^ 工作区和暂存区不改变,但是引用向前回退一次。 可以实现多次提交合并为一次提交
git reset --hard HEAD^ 或 git reset --hard 9e8a761 将游标指向上次提交或任意一次提交,同时工作区也会跟着被覆盖
重置后,重置后的版本之后的版本id就不能在提交历史中看到,
可以git reflog 查看版本的变化,查到重置版本后的版本号
git reset -- filename 或 git reset 仅将全部文件或指定文件撤出暂存区,相当于 git add 的反向操作
-----取消跟踪并保存文件在本地
git rm --cached readme1.txt 删除readme1.txt的跟踪,并保留在本地。
git rm --cached xxDir 删除xxDir的跟踪,并保留在本地。
使用该命令后,.gitignore文件中被配置的路径才会生效