微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么有人应该在 git commit 之前使用 git add?或者为什么有人应该使用 git add ?

如何解决为什么有人应该在 git commit 之前使用 git add?或者为什么有人应该使用 git add ?

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

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

当我认为文件已准备好提交时,我会使用 git add,即使我知道我会在一段时间后提交。除此之外,git diff 报告索引(暂存区)中的内容与工作目录中的内容间的差异。

显示了在 git add 之前执行 git commit 的好处。还有更多这样的好处吗?git add 是否是人们应该遵循的普遍惯例(但为什么?),或者在不执行 git commit 的情况下始终执行 git add

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

解决方法

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

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

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

通过分期,我可以:

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

B. git add 这 3 个文件包含新功能然后提交,然后 git add 这 2 个文件包含错误修复然后使用不同的提交消息进行单独提交以获得更好的可跟踪性

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

我知道 git add filename_here 写 3-5 次不是很实用 (或者,如果您更改了更多文件,则在每次提交之前进行更多次),因此我使用 lazygit 之类的 git 客户端来自动执行暂存 (我只需要点击我想要暂存的文件的文件名)

使用lazygit,我什至可以部分地暂存文件(例如:7 行中仅更改了 5 行)。当某些更改不是很细粒度时,这非常有用(例如:更改了包含类定义的文件,我更改了 3 个方法/函数的定义,其中 2 个方法/函数已准备好提交,1 个尚未准备好)>

lazygit preview

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

免责声明:我不拥有也不为上述这些 git 客户提供任何贡献,我只是觉得它们非常有帮助并想分享

,

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?