字面解释的话,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 -am "str"
#等同于
git commit -a -m "str"

我们运行下

man git commit

来获取a参数的意义即知区别了。

OPTIONS
-a, --all
Tell the command to automatically stage files that have been modified and >deleted, but new files you have not told Git about are not affected.

意思是说

自动把当前所有修改和删除文件放到栈上,但你没有添加过的不会受影响。

拓展

通常我们提交git的时候都是

git add .
git commit -m "some str"
git push

这三大步,而实际上,你只需要两条命令就够了,除非有新的文件要被添加进去。

git commit -am "some str"
git push

git commit -m 与 git commit -am 的区别相关推荐

  1. git中Please enter a commit message to explain why this merge is necessary.

    git中Please enter a commit message to explain why this merge is necessary. git 在执行合并的时候 git merge 出现的 ...

  2. git commit —amend_Git之修改commit记录

    在很多影视作品里,就算主人公乘上了时光鸡,还是无法修改历史(或者说修改后造成十分严重的后果):而现在,在 Git 的强力驱动下,修改历史变得简单又相对安全. 本文叨叨修改 commit 历史的问题 应 ...

  3. 【错误记录】Git 使用报错 ( no changes added to commit (use “git add“ and/or “git commit -a“) )

    文章目录 一.报错信息 二.解决方案 一.报错信息 修改了 Git 版本库中的 file1.txt 文件 , 直接执行 git commit -m "modify file1" 命 ...

  4. git commit -m 与 git commit -am的区别

    字面解释的话,git commit -m用于提交暂存区的文件:git commit -am用于提交跟踪过的文件 要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示 工作目录下面的所有文件 ...

  5. [git] 如何处理push失败的commit

    在使用git及github时,遇到一个问题:commit了一个超过100M的大文件,然后在push时失败,然后就再也无法push了,本地大文件删除了,再commit,再push也还是提示有大文件提交. ...

  6. 【Git】Git 修改刚提交的 commit message

    Git 修改 commit message 修改最近一次的commit 信息 git commit --amend 然后就会进入vim编辑模式 比如要修改的commit是倒数第三条,使用命令: git ...

  7. GIT项目管理工具(part5)--查看commit 日志记录

    本系列BLOG为鄙人学习GIT时的学习笔记.前一个知识点引出后一个知识点,后一个例子接着前一个例子. 文章目录 基本操作 6.查看commit 日志记录 举个例子2(接例子1) 导航 系列文章目录 基 ...

  8. git commit -m和git commit -am

    字面解释的话,git commit -m用于提交暂存区的文件:git commit -am用于提交跟踪过的文件 要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示 工作目录下面的所有文件 ...

  9. git命令:修改已经commit的注释

    在使用git命令时,有时commit后,突然想起来忘记修改commit的注释.修改commit的注释使用下面的命令: git commit --amend 本人也是最近2周才开始使用git,有些也理解 ...

最新文章

  1. 自定义Android注解Part3:绑定
  2. maven中打包项目为war包的pom.xml配置
  3. 面试题目集锦--二叉树
  4. Loss Function , Cost Function and Kernel Function in ML(To be continued)
  5. Shell学习笔记 - 环境变量配置文件(转)
  6. RabbitMQ的5种队列_消息确认模式_入门试炼_第6篇
  7. MATLAB对一个二维矩阵画三维图
  8. 计算机网络学习(六)—网络层概述以及相关习题
  9. Apache 别名与重定向
  10. Paradox of Our Times--我们这个时代的尴尬
  11. 联发科想办法与大陆合作是生存的唯一出路
  12. php的ob缓存详解
  13. 色环电阻在线计算器(收藏)
  14. CorelDRAW_X6使用汇总
  15. python mp3转wav
  16. Latex中的caption
  17. python计算等额本金_等额本金还款计算公式
  18. 以太坊测试网络rinkeby交易测试
  19. 微信小程序 -语音合成:将文字转为语音(小程序插件:微信同声传译)
  20. 需求规格说明书RUP版

热门文章

  1. LOL手游上线!同步专属限量游戏红包封面,还不快来拿?
  2. 好货不能错过!一款在GitHub上22k+star的人力资源管理系统
  3. 皮一皮:直男的世界不可揣测!
  4. 云原生收购潮:思科计划收购Portshift;Kasten加入Veeam
  5. Spring Framework 5.2 正式发布,14项新特性一览
  6. 权限提升 T1548.002 绕过UAC
  7. 御泥坊搜索引擎优化网络诊断_掌握以下这些网络营销搜索引擎优化技巧,你的排名想不靠前都难!...
  8. CentOS中如何搭建Dubbo
  9. HRFormer 多分辨率Transformer 参数骤降,性能更强
  10. 反函数计算 python