我正在寻找 git 中暂存/索引区域发明背后的原因。与其他修订控制系统相比,这似乎是一个额外的步骤。这一定有充分的理由。这就是我所寻找的。
笔记:我不需要知道如何使用它是因为我已经积极使用 git 一段时间了,并且了解从暂存到最终缓存的内容提升。
答案1
这 ”为什么“git commit -a”不是默认值?”条目Git 常见问题解答解释最常见的原因。
索引对于提交工作树中的部分更改很有用。
请考虑以下情形:
- 您正在开发一项新功能;在开发这项新功能的过程中,您对工作树文件进行了几处编辑。
- 您发现了一个需要修复的错误;您继续进行编辑以修复新的错误。
- 您现在有一个包含两种类型更改的工作树:“新功能”和“错误修复”。
您可以使用索引提交仅包含“错误修复”更改的提交,而无需隐藏“新功能”更改。您甚至可以使用它git add -p
来暂存每个更改文件中的部分更改。
有些人避免使用这种特殊技术,因为它会让您提交一些无法完全独立测试的内容(提交 ==“错误修复”,但工作树(和测试环境)==“错误修复”+“新功能”)。实际上,如果您确定“错误修复”和“新功能”更改是独立的,那么即使您的工作树也有“新功能”更改,您也应该能够有效地测试“错误修复”更改。
一个可能不太令人反感的用例涉及在工作树中携带“仅限本地”的更改而无需提交它们。假设存储库包含一个配置文件,该文件需要在您的工作环境中进行轻微更改(更改用户名、电子邮件地址等)。您可以使用索引暂存和提交除仅限本地的配置更改之外的所有内容。该机制与前一个用例相同;不同之处在于,通常更容易说服自己,仅限本地的配置更改不依赖于您可能进行的任何其他可能的更改。