我正在寻找git中staging / index区域发明背后的推理。 与其他版本控制系统相比,这似乎是一个额外的步骤。 必须有一个很好的理由。 这就是我要找的。
注意:我不需要知道如何使用它,因为我一直在积极地使用git,并且通过staging来理解最终caching的内容的提升。
“ 为什么”git提交-a“不是默认? “ Git FAQ中的条目解释了最常见的原因。
该索引对于仅提交来自工作树的一些更改很有用。
考虑以下情况:
您可以使用索引进行只包含“错误修正”更改的提交,而不必存储“新function”更改。 你甚至可以使用git add -p来git add -p每个已更改文件的一部分更改。
有些人避免这种特殊的技术,因为它可以让你提交一些不能完全独立testing的东西(commit ==“bugfix”,但工作树(和testing环境)==“bugfix”+“新特性”)。 实际上,如果您确定“错误修正”和“新function”更改是独立的,那么即使您的工作树也具有“新function”更改,您应该能够有效地testing“错误修正”更改。
一个可能不太令人讨厌的用例就是在一个工作树中携带“仅限本地”的变化,而不必提交它们。 说一个仓库包括一个configuration文件,需要在你的工作环境中稍作修改(改变用户名,电子邮件地址等)。 您可以使用索引来暂存和提交除本地configuration更改以外的所有内容。 其机制与之前的使用案例相同, 不同之处在于,通常情况下更容易说服自己,只有本地configuration更改不依赖于您可能做出的任何其他可能的更改。