【发布时间】:2021-08-10 00:53:54
【问题描述】:
我不是 git 专家,我知道版本控制背后的整个想法是能够记录文件的历史。如果我们可以通过提交来跟踪对工作目录中文件所做的更改,那么我为什么要执行git add 来记录文件,而我只能git commit?
我在 SO 上浏览了this 线程并发现了这个:
当我认为文件已准备好提交时,我会使用 git add,即使我知道要等到一段时间后才会提交。除此之外, git diff 报告索引(暂存区)中的内容与工作目录中的内容之间的差异。
这表明在git commit 之前执行git add 的好处。是否还有更多这样的好处,或者git add 是某人应该遵循的常见约定(但为什么?),或者在不使用git add 的情况下使用git commit 一直有效?
对不起,如果我听起来很愚蠢。提前致谢!!
【问题讨论】:
-
因为如果你不使用add,你就没有什么可以告诉git提交什么(除了要求git提交所有文件或在运行git commit时指定文件)。
-
一般来说,你使用暂存区来设置你已经更改的所有东西中的哪些东西将被提交......你可以修改50个文件并且只提交1或2个......你可以甚至更进一步,通过使用
git add -i,您甚至可以告诉 git 修改文件的哪些部分将包含在下一个修订版中。 -
所以,总而言之,我想说:粒度。
-
您可以在这里提出两个单独的问题:(1) 如何操作 Git 的索引,即暂存区? (2) 为什么会有一个暂存区?
git add是(部分,不是全部)问题#1 的答案;问题 #2 需要求助于哲学、形而上学、心理学或其他一些更模糊和/或动荡的思想领域。 -
但要记住的关键是
git commit不使用工作树中的内容。它提交 Git 的 index (或暂存区)中的内容。因此,在提交发生之前,必须将某些内容从工作树复制到暂存区。使用git commit -a首先为您运行一个单独的复制到暂存区 步骤,但它的工作方式存在一些缺陷;你有时必须使用git add。
标签: git commit git-commit git-add