commit -a 和 -am的区别

  • 理论

    字面解释的话,git commit -m 用于提交暂存区的文件,而 git commit -am 用于提交跟踪过的文件。

    【注意】git commit -am可以写成git commit -a -m,但不能写成git commit -m -a

    定义中出现了 暂存区,跟踪过的文件等术语,下面来了解一下他们。

File Status Lifecycle.png

工作目录下面的所有文件都不外乎这两种状态:已跟踪(tracked)或未跟踪(untracked)。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新(unmodified),已修改(modified)或者已放入暂存区(staged)。

  • 实例

    下面以一个实例来进行说明

    1. 在项目文件夹中新增一个a.txt文件,该文件处于未跟踪状态(untracked).未跟踪状态的文件时无法提交的。

    2. 接下来,使用git add a.txt,使其变成已跟踪状态(tracked)

    3. 这时,如果使用 git commit -m 'add a.txt'就可以顺利提交了

    4. 但是,git commit -m和 -am 的区别到底在那里呢?在于文件修改后的处理

      如果这时,我们向a.txt中添加(修改)内容 ‘我很帅’,这时,a.txt文件是还是处于跟踪状态(tracked)的,但是未暂存状态(unstaged)

    5. 这时,如果使用 git commit -m 是无法提交修改后的文件的 (需要再次-add,-commit),提交的还是最开始的空白的a.txt文件。

    6. 而如果使用 git commit -am ,则可以省略 git add a.txt(使a.txt文件状态变成 staged),因为 git commit -am 可以提交跟踪过的文件,而a.txt已经跟踪过了(-am = add + commit)


      -a和-am的区别.PNG

你可能感兴趣的:(commit -a 和 -am的区别)