5.2节介绍了可以使用git add命令把文件加至暂存区,然后再使用git commit命令把暂存区的内容移往存储库。
在Git中,针对工作目录、暂存区以及存储库3个主要区域,可以通过不同的Git命令,把文件移往不同的区域,如图5-9所示。
(1)git add命令可以把文件从工作目录移至暂存区(或下标)。
(2)git commit命令可以把暂存区的内容移至存储库。
图5-9
注意,要执行Commit命令,也就是将文件存放到Repository区域,才算完成整个流程。基本上只要记得这3个区域怎样操作,在本机端的Git操作就没有太大的问题了。不管是用命令操作,还是用图形界面工具操作,都一定要亲自操作,熟悉这个流程。
1. 一定要二段式吗
如果觉得先add再commit有点烦琐,可以在Commit时多加一个-a参数,缩短这个流程:
$ git commit -a -m "update content"
这样即使没有先add,也可以完成Commit。但要注意的是,这个-a参数只对已经存在于Repository区域的文件有效,对新加入(也就是Untracked files)的文件是无效的。
如果使用SourceTree之类的图形界面工具,可以选中文件,填写Commit信息后,单击Commit按钮,即可完成提交的流程,如图5-10所示。
图5-10
虽然图形界面工具比较简单,但实际上其运行原理与终端机命令是一样的,这也是为什么本书一直强调“要学好Git,一定要理解它的运行原理”。
2. 为什么要二段式这么麻烦
先add再commit,这样的二段式可能会让人觉得有点烦琐,但也是有好处的。假设有一个仓库,仓库门口有个小广场,这个广场就相当于暂存区。把要存放到仓库的货物先放到小广场(git add),等货物达到一定数量后打开仓库门,把小广场上的货物送进仓库中(git commit),并且记录下这批货的来源和用途。
当然,也可以每来一件货物就打开仓库门存一次、记录一次,但这样一来,开仓库的次数就会非常多。也就是说,这种操作方式会导致Commit太过零碎,在查阅记录时可能会不太方便。另外,过于零碎的Commit也可能给其他人带来一些困扰,例如,要进行Code Review的时候,比较有规律的Commit可以一次性看到比较完整的内容,而不需要一个一个Commit慢慢看。
3. 什么时候可以Commit
这个问题没有标准答案,可以将很多文件都改动好后一起Commit,也可只改一个字就Commit。常见的Commit时间点如下。
(1)完成一个任务时:大到完成一整个电子商务的金流系统,小到只加了一个页面甚至只改了几个字,都算是完成了一个任务。
(2)下班的时候:虽然可能还没有完全完成任务,但至少先Commit今天的进度,除了备份之外,也让公司知道你今天一直在努力工作。
(3)想要Commit的时候:只要想Commit,就可以Commit。