为何要有Git add 命令

不知道你们在学习Git的过程当中,有没有想过一个问题,就是为何要有git add 命令.git

当一个文件被咱们add事后,每次commit前仍是须要git add,为何不像svn那样只用add一次,之后在也不用add命令了.并且咱们add文件后,再去修改文件,而后执行commit命令,最后的修改并不会被commit到仓库,这也增长了提交错误的风险.svn

谈论这个问题前,咱们有必要了解一下Git环境下,文件常见的几种状态.学习

文件从没有被add过spa

执行add命令后设计

执行commit命令后get

执行commit后再进行修改it

还有一种是执行add命令后,不commit,而后修改文件io

如今咱们来讨论上述几种状况:file

  1. untracked files 

            说明文件并无被git管理,全部的git命令对它都不起做用(git add命令除外)。循环

     2. change to be committed

             说明文件准备好被提交,加入到仓库中。

     3. nothing to commit, working directory clean

             说明工做区和仓库文件相同

     4.changes not staged for commit

            说明本地文件和仓库不一样

     5. 对于同一个文件既有change to be committed 又有 change not staged for commit

            说明文件在add后进行了修改,若是这时候直接执行commit, add事后进行的修改不会修改到仓库,文件的状态会变为第四个,changes not staged for commit:

            若是这时候执行add,而后在commit,这样add后的修改也会一块儿提交到仓库。

咱们平时使用git的时候通常都是2,3,4不断的循环,如今假设Git中没有add命令会怎么样呢?

咱们会发现只会有三个状态1,3,4,少了状态2,4,咱们只须要在3,4两个状态间循环就能够。也许你会说这不是很好嘛,简单了不少,可是每每复杂的设计是为了带来更多的功能。

通常状况下,一次commit表明完成了某项操做。假如说你一天会完成一项工做,也就是会commit一次,上午完成了一半的工做,下午来的时候发生了意外,你只能将你的代码倒回到今天刚上班的时候,上午的工做也将付之东流。可是有了git add 命令,你能够在随时add,若是代码出现了问题,能够随时倒回到git add 时候的状态。你还能够随时比较当前代码和git add 时代码的差异,git add 时和仓库代码的差异,当前代码和仓库代码的差异。简单来讲以下图(并不彻底精确,有些命令会重用):

本文主要参考以下的知乎的回答,若有兴趣自行阅读.

https://www.zhihu.com/question/19946553

相关文章
相关标签/搜索