之前已经简单说了 Git 的基础,还有多人协作的流程。接下来的博客就来聊聊一些 Git 基础中更加深入的内容。
版本控制的核心是“版本”,Git 是版本控制软件,对应的核心概念就是 提交 。提交一次就是一个版本,而每一次的提交,不管是快照还是(未修改的文件)链接,覆盖的范围都是整个项目。
一次提交操作,具体分两个步骤:
- **添加(Add)**:将修改的文件添加到 暂存区 。
- **提交(Commit)**:将在 暂存区 的文件保存到 Git 仓库。
这里延伸出 Git 的基础概念。
基础概念
被 Git 管理的文件,有三种状态:
- 已修改(modified)
- 已暂存(staged)
- 已提交(committed)
分别对应三个区域:
- 已修改(modified) —— 工作区(Working Directory)
- 已暂存(staged) —— 暂存区(Staging Area)
- 已提交(committed) —— Git 仓库(Git Directory)
工作区是 在磁盘上可以直接看见的、可以用编辑器直接修改文件 的目录。当文件被修改了,Git 就会把这个文件标记为 已修改。
暂存区实际上只是一个文件,里面存储了从工作区添加的被标记为 已修改 的文件的快照。当文件被添加进暂存区时,Git 就会将这个文件标记为 已暂存。
Git 仓库是 Git 中最重要的部分,存放了每个从暂存区提交的文件快照。当文件从暂存区提交到 Git 仓库时,Git 就会将这个文件标记为 已提交。(Git 的还原操作,实际上就是将保存在仓库中的快照提取出来覆盖到工作区)
了解 Git 的基础概念之后,就不难理解为什么一次提交操作有两个步骤了:首先将修改添加到暂存区,然后再提交进 Git 仓库。
添加
现在可以来说说 添加(Add) 了。
最常用的添加命令,也是人人都会用的,可能就是 git add .
了。在 Git 2.0 以上,git add .
默认等于 git add --all
。这个命令会将当前工作区的所有更改添加进暂存区,这里的“更改”有三种情况:新增文件、修改文件、删除文件。
熟悉 Linux 的小伙伴都知道,.
表示当前目录。相对的,Git 也可以单独添加某个文件或目录,命令是:git add <文件名>
,并且可以使用 *
通配符,比如:git add abc*
。
如果还想要更精细的控制,可以使用交互模式:git add --interactive
。交互模式可以具体控制到某个文件内的代码片段,甚至可以极端到逐行提交。
这种操作在实际开发中也是比较常见的。举个栗子:在一个类中添加了一个新的方法,同时修复了另一个方法中的错误,这时候就可以分开提交。分开提交的目的在于,可以使提交的历史纪录更加清晰,同时能让其他人更早修复错误。还可以排除一些不该提交的修改,比如 为调试而做的实验性修改,或尚未完成的修改。