工作目录和git索引有什么区别?

Win*_*Win 8 git git-commit git-index

混帐书定义git的指标:

Git索引用作工作目录和存储库之间的临时区域.您可以使用索引构建一组要一起提交的更改.创建提交时,提交的内容是索引中当前的内容,而不是工作目录中的内容.

但是我仍然很难理解它,特别是突出的声明"所承诺的不是我工作目录中的内容".

到目前为止,在我有限的使用Git的工作,一切都在工作目录始终致力于,如果我这样做:

git add <all new files in the working directory>
git commit -a -m "git will refuse to commit without this comment" 
Run Code Online (Sandbox Code Playgroud)

git然后提交所有修改过的文件以及所有新文件.

那么,实际上,我的工作目录暂存区域?

我不确定git index它是什么以及它如何被解释为临时区域.

你能解释一下吗?

Von*_*onC 7

诀窍是:

当您向索引添加(git add)时,您不必立即提交

所以,如果你添加一些超级复杂功能,然后进行改变和......终于彻底打破它,你仍然可以提交,原因是什么在你的指数(您已经添加什么11分钟前才进一步修改失败打破它)不是你工作树里现在的东西(现在已经无可救药地破坏了).

因此,它可以帮助从时间增加时间指数当前的开发工作,知道你可以在任何时候提交您已经索引的最后一个"稳定"状态.


提交的另一种方式不是当你在工作树中时git add --patch:

在索引和工作树之间以交互方式选择补丁,并将它们添加到索引中.
这使用户有机会在将修改后的内容添加到索引之前查看差异.

您可以将当前文件的一部分添加到索引中(就像您正在编写的三个函数之一),然后只提交.


ant*_*oft 5

索引是 git 管理的目录树的副本。最初,它是 HEAD 提交内容的副本。 git add将文件从工作目录复制到索引。 git commit从索引中的内容创建一个新的提交。

索引就像一个缓冲区——它不存储在 git 历史记录中,但对它的访问由 git 控制(与您的工作目录不同,它可以通过多种方式访问​​)。git 从索引提交,所以提交的是 git 控制的东西。


Clu*_*ess 4

在您的特定情况下,答案是您正确理解文档,但使用“快捷方式”命令提交整个工作目录。

如果您运行git commit -a -m "Message",那么您的工作目录将被视为暂存区域。有时这很方便,但您会失去按设计使用索引的能力。尝试以下命令:

git commit -m "Message"
Run Code Online (Sandbox Code Playgroud)

如果您这样做,则可以使用暂存区域仅提交对工作目录所做的部分更改。

  • 不,你一开始是对的。工作目录和索引之间的区别在于您是否对包含更改的文件运行了“git add”。问题是运行“git commit -a”有点像运行“git add --update”然后运行“git commit”。 (3认同)