git - 为什么 Git 有工作区、暂存区和本地存储库?

标签 git

我试图理解为什么 Git 有这么多地方来存储更改。想象一个更简单的 Git 模型,它只有一个本地存储库(而不是一个单独的暂存区或工作区)。在这个模型中:

  1. 我们可以在我们希望 Git 跟踪的本地存储库中选择文件
  2. 我们可以通过在不同时间点拍摄存储库快照来跟踪更改
  3. 我们可以像往常一样获取对 origin/master 的更改并 merge
  4. 我们可以有多个分支并在它们之间切换
  5. 我们可以像往常一样将更改从本地存储库推送到“源”

换句话说,我们可以做 Git 现在做的大部分事情,但没有工作区、暂存区和本地存储库的概念困惑。为什么同时拥有这三者是有用的?

最佳答案

已经有大部头 写在git 上。也许您缺少的是工作区和临时区域何时有用的具体示例。

工作树/工作树

1) 您正在研究这个漂亮的想法几分钟,但它还没有为您的本地存储库做好准备。经过几分钟的修补,您意识到这根本行不通。您可以简单地 git reset 您的工作区到本地存储库。

如果您直接在本地存储库上工作,您会 i) 弄脏了您的提交历史,并且 ii) 必须处理回滚。

2) 或者,假设您要 merge 两个可能存在冲突的分支。您可以 git merge --no-commit,然后在暂存和提交到本地存储库之前在工作区内手动清理。

暂存区

1) 您已经在您的工作区中敲定了一个错误修复。然而,查看积压工作,您会意识到错误修复确实分为两个概念部分,解决了两个截然不同的潜在问题。

拥有暂存区可以让您“暂存”错误修复的前半部分,并将其提交到您的本地。然后,您可以“暂存”错误修复的后半部分,并单独提交。

2) 或者,以您对单个文件进行更改为例。使用暂存区,您可以仅将该文件的一部分(通过补丁)提交到本地存储库。所有更改都将在“工作区”中,但只有一个子集会“暂存”以供提交。我经常发现自己暂存自述文件和变更日志的部分文件。

关于git - 为什么 Git 有工作区、暂存区和本地存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40347431/

相关文章:

Git diff 给了我一个致命的 : bad revision 'HEAD~1'

git - 仅在两次提交之间从 Git 历史记录中删除文件

git - Git 更新的 RSS 提要

git - 个人和 SCCS 项目范围内使用 git

php - git post-receive 钩子(Hook)在 php 中

git - 另一个 git 进程似乎正在运行,因此无法提交

git - 多个 git 编辑器

c# - 使用 LibGit2Sharp 以编程方式删除本地存储库

git - 将现有的源代码文件夹添加到 Git

git - 检查给定本地存储库是否存在任何远程上游离线 git