git add命令和Git commit执行原理
一.git本地仓库结构
- 工作区(working directory / working tree
- 存区(staging area)
- 版本库(git directory / repository)
git本地仓库结构图:
二.git status查看代码文件的状态
- 代码文件分成两种:
- 一种是tracked,tracked文件就是已经提交到git版本库中的文件,后面可以处于modified或者staged状态
- 一种是untracked,就是从来没有提交到git版本库的代码文件(也从来没有放入暂存区
实例讲解git status 文件的状态:
-
可以新建一个TestServiceImpl.java,然后执行git status命令,看一下当前的状态,
此时git status会告诉你,有文件没有被提交到git仓库中或者是暂存区中过,就是untracked,就是从来没有被git追踪过它的版本,甚至第一个版本都没有被git追踪。 -
git add oa-auth/src/main/java/com/zhss/oa/auth/service/impl/TestServiceImpl.java命令
TestServiceImpl.java这个文件,从untracked状态,变成了new状态,就是一个第一次进入git托管的一个新文件,看到的第一个版本 -
git commit -m ‘add TestServiceImpl class’
此时,这个文件就进入了一个tracked状态,已经被git开始追踪了 -
然后对TestServiceImpl.java进行修改,加入一个方法,接着看一下状态
此时变成了modified状态,就是已经被追踪了,但是后来又被修改了,但是是changes not staged for commit,就是被修改了,但是没有被staged,staged就是还没有被加入暂存区 -
再次执行git add --all .命令
此时的状态是,changed to be committed,modified,此时文件被放入了暂存区,modified状态,同时等待被commit提交到git仓库中去
总结:
(1)新文件刚创建:untracked,此时仅仅停留在工作区中
(2)git add 新文件:new file,此时已经被追踪了,放入了暂存区中 => staged
(3)git commit 新文件:committed,已经被追踪了,放入了git仓库中 => committed
(4)修改那个文件:modified,changes not staged to be committed,没有加入暂存区,被修改的内容仅仅停留在工作区中 => modified
(5)git add 修改文件:modified,changes to be committed,修改的文件版本被已经加入暂存区 => staged
(6)git commit 修改文件:committed,修改后的新版本提交到了git仓库中 => committed