git工作区、暂缓区、历史记录区三个区域的关系
一、git可以简单分为三个区域
- 工作区(working directory)
- 暂缓区(stage index)
- 历史记录区(history)
二、三个区域关系
工作区是我们能看到的区域,我们在工作区修改增加代码;完成编辑后,我们用 git add
将工作区文件添加到暂存区;然后利用 git commit
提交文件到我们自己的分支。
操作命令:
git checkout files
或者git checkout .
:把文件从暂存区域复制到工作目录,用来丢弃工作区修改,不改变暂存区。git add files
或者git add .
:工作区添加文件到暂存区, .代表全部文件。git reset files
或者git reset
:清空暂存区文件,不改变工作区。git rm --cached files
:从暂存区删除文件,工作区则不做出改变。
三、关于git reset
命令格式:git reset [--soft | --mixed | --hard] [<commit>]
使用参数—hard,如
git reset --hard <commitID>
:- 替换引用的指向。引用指向新的提交ID。
- 替换暂存区。替换后,暂存区的内容和引用指向的目录树一致。
- 替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同。
使用参数—soft,如
git reset --soft <commitID>
:即只更改引用的指向,不改变暂存区和工作区。使用参数—mixed或者不使用参数(默认为—mixed),如
git reset <commit>
:更改引用的指向及重置暂存区,但是不改变工作区。git reset
或者git reset HEAD
:仅用HEAD指向的目录树重置暂存区,工作区不会受到影响,相当于将之前用git add 命令更新到暂存区的内容撤出暂存区。引用也未改变,因为引用重置到HEAD相当于没有重置。git reset filename
或者git reset HEAD filename
:仅将文件filename的改动撤出暂存区,暂存区中其他文件不改变。相当于命令git add filename 的反向操作。git reset --soft HEAD^
:工作区和暂存区不改变,但是引用向前回退一次。当对最新的提交说明或者提交的更改不满意时,撤销最新的提交以便重新提交。git reset HEAD^
或者git reset --mixed HEAD^
:工作区不改变,但是暂存区会回退到上一次提交之前,引用也会回退一次。git reset --hard HEAD^
:彻底撤销最近的提交。引用回退到前一次,而且工作区和暂存区都会回退到上一次提交的状态。自上一次以来的提交全部丢失。