为什么在git中有一个暂存过程?

fas*_*seg 15 git

为什么"git add"和"git commit"之间存在暂存区域?我理解这个概念,但是在实际提交之前没有看到将文件添加到临时区域的意义.为什么不跳过这一步呢?

And*_*ndy 19

事实是:索引是一个临时区域.每个SCM都有它,但是git会向你展示并有效地使用它.

一个主要原因是您不必提交整个工作目录.您可以将其中的一部分移动到索引并提交那些.

例如,您正在处理两个不同的事情,现在您的代码看起来像

//random code

//bug fix

//new feature
Run Code Online (Sandbox Code Playgroud)

您可以只调度该//bug fix行并提交该行,然后暂存该//new feature行并提交该行.

您现在每个都有两个不同的提交.稍后在测试中你意识到new feature提交破坏了一些东西,你可以删除new feature提交,但不必重新提交bug修复

正如Dickon Reed在他的回答中指出的那样,你也获得了性能,因为git commit现在只需要在提交中添加索引中的内容.它不需要搜索您的树来查找所有更改.


Dic*_*eed 13

  1. git commit不必检查树中的每个文件以查看是否已更改.在一棵大树上,可以节省大量时间.
  2. 通过暂存一些文件(或者某些文件中的某些更改),您可以获得精确的控制,确切地想要提交什么以及不提交什么.例如,如果你发现一个微不足道的错误,同时通过一个大的改变,你可以快速阶段和提交一行错误修复,而不会阻止所有其他更改.

  • 但是,当您执行“git add”操作时,仍然需要解决这两点,因此我看不出这是如何带来实际好处的。 (2认同)