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

要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示

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

下面以一个实例说明

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

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

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

但是,git commit -m 和 git commit -am的区别在哪里?在于a.txt文件修改之后的处理

下面,向a.txt添加内容'a'

文件a.txt处于已跟踪,但未暂存状态。这时,如果使用git commit -m是无法提交最新版本的a.txt的,提交的只是最开始空内容的旧版本a.txt

要提交新版本a.txt,即内容为'a'的a.txt,则需要使用git add a.txt,将新版本的a.txt放到staged暂存区,然后才能使用git commit -m进行提交

而如果使用git commit -am,则可以省略git add a.txt这一步,因为git commit -am可以提交跟踪过的文件,而a.txt一开始已经被跟踪过了

总结,使用这两个命令区别的关键就是git add命令

git add命令是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等

我们需要用git add命令来跟踪新文件,但如果使用git commit -am可以省略使用git add命令将已跟踪文件放到暂存区的功能

git commit -m 与 git commit -am的区别的更多相关文章

  1. [Practical Git] Filter commit history with git log arguments

    In the last lesson, we learned how to format the git log output; in this lesson we will learn how to ...

  2. git基本命令--status, add, diff, commit, log

    git status: git status命令的输出十分详细,但其用语有些繁琐. 如果你使用 git status -s 命令或 git status --short 命令,你将得到一种更为紧凑的格 ...

  3. git rebase -i命令修改commit历史

    [TOC] 修改commit历史的前提 修改历史的提交是可能有风险的,是否有风险取决于commit是否已经推送远程分支,未推送,无风险,如果已推送,就千万不要修改commit了. 修改commit历史 ...

  4. git修改最后一次commit的内容

    提交修改 $ git add test.txt $ git commit -m "提交test.txt文件" 修改注释说明 如果需要修改commit的注释说明,则执行以下命令: $ ...

  5. Git自动化合并多个Commit

    目录 git rebase逻辑 git editor的修改 处理git-rebase-todo文件 Python实现 当我们有多个commit或者从开源处拿到多个commit时,想合成一个commit ...

  6. 修改git以往历史中所有commit的name和email

    当换了新的电脑设备或者在 homestead 中使用 git 的时候:如果忘了 git config 设置用户名和邮箱:这样当 git commit 的时候就会使用设备名作为 git 用户名:或者我们 ...

  7. git push 提交某一个commit

    (以下情况是我们的一位开发小哥哥遇到了提交失败,来找我,我给他解决的过程,以前我也没遇到,所以记录下来) 我们会遇到这样的情况,在develop分支上,第一天修改的文件,已经执行了git commit ...

  8. [Git/GitHub] Tutorial 1. Git download and commit first project

    1. Install at https://git-scm.com/downloads 2. Set up your name and email $ git config --global user ...

  9. git第四节----git commit message

    @git  commit message 什么是git commit message :git commit -m '每次提交时编辑的内容' git commit message的好处:      1 ...

随机推荐

  1. FTP上传、下载(简单小例子)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  2. SNF快速开发平台MVC-Grid++集成打印

    一.显示效果: 二.程序实现: 1.先要在 打印模版程序 给指定页面进行在线设计打印模版 2.在使用的程序当中,增加如下代码即可.程序上是可以挂多个打印模版的,程序页面的代码不用动直接可以读取到打印模 ...

  3. 用VS2012建立core2.1网站项目后引用Microsoft.AspNetCore.Session不了

    做个.NET CORE的新项目,和往常一样,VS2017新建CORE项目(CORE2.1),NUGET引入session,结果引入不了,说什么版本不对应的,把SESSION降了一个版本,可以安装上了, ...

  4. pandas通过皮尔逊积矩线性相关系数(Pearson's r)计算数据相关性

    皮尔逊积矩线性相关系数(Pearson's r)用于计算两组数组之间是否有线性关联,举个例子: a = pd.Series([1,2,3,4,5,6,7,8,9,10]) b = pd.Series( ...

  5. Go语言_iota用法

    一.介绍 iota,特殊常量,可以认为是一个可以被编译器修改的常量. 在每一个const关键字出现时,被重置为0,然后再下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1. io ...

  6. 第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置

    第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置 1.Linux安装配置 注意事项: 虚拟机网卡桥接模式 不要拨VPN 如果,网络怎么都 ...

  7. mysql语法 -- concat函数

    mysql CONCAT(str1,str2,…)                        返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL.或许有一个或多个参 ...

  8. 编写具有临时root权限的应用

    本文以dpkg为例进行演示 关于setuid具体原理可查阅<Unix高级环境编程>“进程控制”章节关于“设置用户id和设置组id”的介绍 1. 首先需要通过setuid(0),让程序获取临 ...

  9. mysql添加字段并且设置默认值

    ALTER TABLE task ADD uploadStatus TINYINT(4) DEFAULT '0' COMMENT '上传状态';

  10. 我的Mac Pro coding环境配置

    新装了OS X 10.11.1. 记录一下开发用得到的一些玩意,方便下次再次配置. homebrew国内源:http://mirrors.tuna.tsinghua.edu.cn/help/#home ...