-
理论
字面解释的话,git commit -m 用于提交暂存区的文件,而 git commit -am 用于提交跟踪过的文件。
【注意】git commit -am可以写成git commit -a -m,但不能写成git commit -m -a
定义中出现了 暂存区,跟踪过的文件等术语,下面来了解一下他们。
工作目录下面的所有文件都不外乎这两种状态:已跟踪(tracked)或未跟踪(untracked)。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新(unmodified),已修改(modified)或者已放入暂存区(staged)。
-
实例
下面以一个实例来进行说明
在项目文件夹中新增一个a.txt文件,该文件处于未跟踪状态(untracked).未跟踪状态的文件时无法提交的。
接下来,使用git add a.txt,使其变成已跟踪状态(tracked)
这时,如果使用 git commit -m 'add a.txt'就可以顺利提交了
-
但是,git commit -m和 -am 的区别到底在那里呢?在于文件修改后的处理
如果这时,我们向a.txt中添加(修改)内容 ‘我很帅’,这时,a.txt文件是还是处于跟踪状态(tracked)的,但是未暂存状态(unstaged)
这时,如果使用 git commit -m 是无法提交修改后的文件的 (需要再次-add,-commit),提交的还是最开始的空白的a.txt文件。
-
而如果使用 git commit -am ,则可以省略 git add a.txt(使a.txt文件状态变成 staged),因为 git commit -am 可以提交跟踪过的文件,而a.txt已经跟踪过了(-am = add + commit)