git工作区、暂存区、版本库之间的关系以及diff reset checkout相关的命令解析

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 .   会取消所有本地的修改(相对于暂存区)。

 

posted @ 2017-04-13 17:12  欣欣向雨  阅读(295)  评论(0)    收藏  举报