一.GIT管理下的文件周期
1.新添加的文件或文件夹是untracked状态,意思是git的版本管理里没有这个文件。
可以用git add来把这个文件加入git管理,之后就会是tracked中的stage状态了。
如果是新git clone或git init的文件,则是在tracked状态里的unmodified状态。
注1:新添了文件,untracked的状态:
注2:用git add <文件名> 将文件加入git管理后,文件是tracked下的staged状态
2.在git的管理下的状态是tracked状态,包括unmodified,modified和staged三种状态。
3.unmodified状态指本地的文件与版本库里该文件最近一次的提交是一致的。
4.一旦修改了文件,文件内容与版本库里该文件最近一次的提交内容不一致,状态便变成modified。此时可以用git add <文件> 来stage文件。
stage之后的文件可以用git commit <文件> 来提交文件或 git reset HEAD <文件> 来取消stage状态。
5.当一个文件已经stage后,如果再做修改,此时的状态是部分stage,部分modified。如果commit的话,会提交已经stage的那部分。
6.git add有多种功能,可以将untracked的文件track,可以将modified的文件stage,还可以将merge时conflict后来修改好的文件再次stage。
问题:为什么要有一个stage的状态?修改了文件要stage再commit不是很麻烦吗?
我的答案:commit是一次对所有stage过的文件的提交,没有针对某一个文件的commit。
一般说来,一次commit是完成一个版本的snapshot,可以修改一个文件就stage,也可以修改完了很多文件一起stage。stage就像一个箱子,把要commit的内容都装上去。然后对装箱的内容做commit操作。
如果修改好的文件可以直接提交,可以用git commit -a来自动stage,即对全部修改自动装箱提交。