实战:
1、在工作区新建一个TestServiceImpl.java文件,看一下当前的状态:
此时git status会告诉我们,有文件没有被提交到git仓库中或者是暂存区中过,就是untracked文件状态。
2、执行命令 git add /e/Project413/phase14/moudle-biz/src/main/java/com/wilee/TestServiceImpl.java
TestServiceImpl.java这个文件,从untracked状态,变成了new file状态,第一次进入git托管的一个新文件。
3、执行命令:git commit -m "add TestServiceImpl class"
此时,这个文件就进入了一个tracked状态,已经被git开始追踪了。
4、对TestServiceImpl.java进行修改,查看一下状态:
此时变成了changes not staged for commit,modified状态, 已经被追踪了又被修改了但是还没有被staged,staged就是还没有被加入暂存区。
5、再次执行 git add --all .
命令
此时是changed to be committed,modified状态,文件被放入了暂存区,同时等待被commit提交到git仓库中去。
6、删除一个文件:
此时文件的状态是 changed to be committed,deleted状态。
7、再次执行git commit -m "备注"
此时文件变成了committed,已经提交了。而且git status也是干净的啦。
7种状态映射到3种状态的补充说明
工作目录下面的所有文件都不外乎这两种状态:
tracked
tracked文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新(unmodified),已修改(modified)或者已放入暂存区(staged)。
注意:初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。
untracked
untracked文件,就是从来没有提交到git版本库的代码文件(也从来没有放入暂存区)。
(1)新文件刚创建:untracked,此时仅仅停留在工作区中
(2)git add 新文件:new file,Changes to be committed此时已经被追踪了,放入了暂存区中 => staged
(3)git commit 新文件:committed,已经被追踪了,放入了git仓库中 => committed
(4)修改那个文件:modified,changes not staged for commit,没有加入暂存区,被修改的内容仅仅停留在工作区中 => modified
(5)删除那个文件:deleted,changes not staged to be committed,没有加入暂存区,被删除的内容仅仅停留在工作区中 => modified
(6)git add 删除文件:deleted,changes to be committed,修改的文件版本被已经加入暂存区 => staged
(7)git commit 修改、删除文件:committed,修改后的新版本提交到了git仓库中 => committed
问题:
1、如果add到暂存区的TestServiceImpl.java又被修改了会是什么状态?
此时就会有两个状态的TestServiceImpl.java
2、add到暂存区的TestServiceImpl.java又被修改了再次add后,git status里面会出现两个TestServiceImpl.java吗?
git commit才会生成一个版本,不论add到暂存区的文件进行多少次修改,只要没有commit则在暂存区,最终add到暂存区的都是一个文件。
比如:修改了TestServiceImpl.java文件add到暂存区,在工作区删除掉TestServiceImpl.java文件后再次add到暂存区的状态如下:
3、修改后的TestServiceImpl.java不添加到暂存区,直接进行commit操作会咋样?
一次git add算做一个版本,每次执行一次git add操作,都是将工作区中所有修改的文件,都作为一个新的版本,放入暂存区,这个版本等待被提交。git commit只会把暂存区的内容提交到仓库中去!