为什么有人应该在 git 提交之前使用 git 添加?或者为什么有人要使用 git add 呢?

Why should someone use git add before git commit? OR why should someone use git add at all?

我不是git方面的专家,我知道版本控制背后的整个想法是能够记录文件的历史。如果我们可以通过提交来跟踪对工作目录中文件所做的更改,那么我为什么要执行 git add 来记录文件,而我只能 git commit?

我浏览了 SO 上的 this 线程,发现了这个:

I use git add when I think a file is ready to be committed, even if I know I won't make the commit until some time later. All else apart, git diff reports on the differences between what is in the index (staging area) and what is out in the working directory.

这表明在 git commit 之前执行 git add 的好处。是否还有更多这样的好处,或者 git add 是某人应该遵循的普遍惯例(但为什么?),或者一直做 git commit 而没有做 git add 一直有效?

对不起,如果我听起来很蠢。提前致谢!!

很长一段时间我只是认为 git 是编程项目的某种“保存状态”(或快照), 我可以在其中回到历史上一个状态 (当时我只是 git add . 然后 git commit.

但是有了“staging”,现在我可以在提交之前“预览”我想提交的内容。 我发现将暂存视为提交的“打印预览”更容易:您可以在实际提交之前查看提交的内容 (在实际花费纸张和墨水之前,您可以看到打印的文档)

例如,我编辑了 9 个文件,3 个文件包含新功能,2 个文件包含错误修复,而 4 个文件未完成(可能是新功能或取消的功能请求)

通过分期,我可以:

一个。 git 添加这 3 个文件包含新功能,2 个文件包含错误修复,然后将其提交为“生产就绪提交” (准备部署,例如:通过自动方式上传到 public http 服务器)。 我的其他 4 个未完成的文件将不会包含在提交中

乙。 git 添加这 3 个文件包含新功能然后提交,然后 git 添加这 2 个文件包含错误修复然后使用不同的提交消息单独提交以获得更好的可追溯性

此“暂存”的另一个好处是让我有时间最后一次“检查”我的更改。在这个“最后一次复习”的时间里,我可以更彻底地发现错误以防止错误(例如:错字)

我知道写3-5次git add filename_here不太实用 (如果你更改了更多的文件,或者更多次)在每次提交之前,所以我使用 git 像 lazygit 这样的客户端来自动化暂存 (我只需要单击要暂存的文件的文件名)

使用 lazygit,我什至可以部分暂存文件(例如:7 行中只有 5 行被更改)。当某些更改不是很细化时(例如:更改了包含 class 定义的文件,我更改了 3 methods/functions 的定义,其中 2 个 methods/functions 已准备好提交并且1 尚未准备好)

其他 git 可用于“预览和单击”暂存的客户端:sourcetree (windows)、gitextensions (windows/linux)

免责声明:我不拥有上述这些 git 客户,也没有贡献这些客户,我只是觉得它们很有帮助并想分享

git-add - 添加文件内容到索引。

“索引”保存了工作树内容的快照,下一次提交的内容就是这个快照。因此,在对工作树进行任何更改之后,在 运行 commit 命令之前,您必须使用 add 命令将任何新的或修改的文件添加到索引中。

可以通过多种方式指定要提交的内容:

通过使用 git-add1 在使用 commit 命令之前增量地“添加”对索引的更改(注意:即使修改的文件也必须“添加”)。

https://git-scm.com/docs/git-commit