git的3大区 : 工作区 暂存区 版本区 分别代表3个不同的目录树
暂存区跟版本区被包含在版本库中(.git目录)如下图:
工作区 add 到暂存区 commit 到版本区。
1.git diff
git diff 默认情况是 工作区跟暂存区的比较
git diff --cached 暂存区跟版本区的比较
git diff HEAD 工作区跟版本区的比较
2.git reset 改变的是具体分支的指向(commit) HEAD又指向某个分支或commit
第一种用法使用路径(paths)
git reset commitId paths 不会重置版本区 ,不会改变工作区,而是用指定提交状态(commit)下的文件覆盖暂存区的文件。
git reset HEAD paths 相当于取消之前执行的git add paths命令时改变的暂存区。
第二种用法不使用路径(paths)则会重置版本区,根据不同的选项,可以对暂存区或工作区重置
git reset --hard commit 3个区都重置
git reset --soft commit 只更改版本区
git reset --mixed(默认的) commit 重置版本区和暂存区
栗子:
git reset 将之前add命令更新到暂存区的内容撤出暂存区。
3.git checkout 改变的是HEAD的指向 会重置工作区。
git checkout 默认是从暂存区检出。
包含 paths 不会改变HEAD头指针,主要用于指定版本的文件覆盖工作区中对应的文件。
不包含paths会改变HEAD头指针。
栗子:
git checkout -- . 或 git checkout . 会取消所有本地的修改(相对于暂存区)。