git add命令和Git commit执行原理

一.git本地仓库结构

  1. 工作区(working directory / working tree
  2. 存区(staging area)
  3. 版本库(git directory / repository)
    git本地仓库结构图:git add命令和Git commit执行原理

二.git status查看代码文件的状态

  • 代码文件分成两种:
  1. 一种是tracked,tracked文件就是已经提交到git版本库中的文件,后面可以处于modified或者staged状态
  2. 一种是untracked,就是从来没有提交到git版本库的代码文件(也从来没有放入暂存区

实例讲解git status 文件的状态:

  1. 可以新建一个TestServiceImpl.java,然后执行git status命令,看一下当前的状态,
    git add命令和Git commit执行原理
    此时git status会告诉你,有文件没有被提交到git仓库中或者是暂存区中过,就是untracked,就是从来没有被git追踪过它的版本,甚至第一个版本都没有被git追踪。

  2. git add oa-auth/src/main/java/com/zhss/oa/auth/service/impl/TestServiceImpl.java命令
    git add命令和Git commit执行原理
    TestServiceImpl.java这个文件,从untracked状态,变成了new状态,就是一个第一次进入git托管的一个新文件,看到的第一个版本

  3. git commit -m ‘add TestServiceImpl class’ git add命令和Git commit执行原理
    此时,这个文件就进入了一个tracked状态,已经被git开始追踪了

  4. 然后对TestServiceImpl.java进行修改,加入一个方法,接着看一下状态git add命令和Git commit执行原理
    此时变成了modified状态,就是已经被追踪了,但是后来又被修改了,但是是changes not staged for commit,就是被修改了,但是没有被staged,staged就是还没有被加入暂存区

  5. 再次执行git add --all .命令git add命令和Git commit执行原理
    此时的状态是,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