为什么要有Git add 命令

不知道大家在学习Git的过程中,有没有想过一个问题,就是为什么要有git add 命令.

当一个文件被我们add过后,每次commit前还是需要git add,为什么不像svn那样只用add一次,以后在也不用add命令了.而且我们add文件后,再去修改文件,然后执行commit命令,最后的修改并不会被commit到仓库,这也增加了提交错误的风险.

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

文件从没有被add过

执行add命令后

执行commit命令后

执行commit后再进行修改

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

现在我们来讨论上述几种情况:

  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

转载于:https://my.oschina.net/abely/blog/678310

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值