我试图理解为什么 Git 有这么多地方来存储更改。想象一个更简单的 Git 模型,它只有一个本地存储库(而不是一个单独的暂存区或工作区)。在这个模型中:
- 我们可以在我们希望 Git 跟踪的本地存储库中选择文件
- 我们可以通过在不同时间点拍摄存储库快照来跟踪更改
- 我们可以像往常一样获取对 origin/master 的更改并 merge
- 我们可以有多个分支并在它们之间切换
- 我们可以像往常一样将更改从本地存储库推送到“源”
换句话说,我们可以做 Git 现在做的大部分事情,但没有工作区、暂存区和本地存储库的概念困惑。为什么同时拥有这三者是有用的?
最佳答案
已经有大部头 写在git 上。也许您缺少的是工作区和临时区域何时有用的具体示例。
工作树/工作树
1) 您正在研究这个漂亮的想法几分钟,但它还没有为您的本地存储库做好准备。经过几分钟的修补,您意识到这根本行不通。您可以简单地 git reset
您的工作区到本地存储库。
如果您直接在本地存储库上工作,您会 i) 弄脏了您的提交历史,并且 ii) 必须处理回滚。
2) 或者,假设您要 merge 两个可能存在冲突的分支。您可以 git merge --no-commit
,然后在暂存和提交到本地存储库之前在工作区内手动清理。
暂存区
1) 您已经在您的工作区中敲定了一个错误修复。然而,查看积压工作,您会意识到错误修复确实分为两个概念部分,解决了两个截然不同的潜在问题。
拥有暂存区可以让您“暂存”错误修复的前半部分,并将其提交到您的本地。然后,您可以“暂存”错误修复的后半部分,并单独提交。
2) 或者,以您对单个文件进行更改为例。使用暂存区,您可以仅将该文件的一部分(通过补丁)提交到本地存储库。所有更改都将在“工作区”中,但只有一个子集会“暂存”以供提交。我经常发现自己暂存自述文件和变更日志的部分文件。
关于git - 为什么 Git 有工作区、暂存区和本地存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40347431/