git commit -m 与 git commit -am的区别
字面解释的话,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的区别的更多相关文章
- [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 ...
- git基本命令--status, add, diff, commit, log
git status: git status命令的输出十分详细,但其用语有些繁琐. 如果你使用 git status -s 命令或 git status --short 命令,你将得到一种更为紧凑的格 ...
- git rebase -i命令修改commit历史
[TOC] 修改commit历史的前提 修改历史的提交是可能有风险的,是否有风险取决于commit是否已经推送远程分支,未推送,无风险,如果已推送,就千万不要修改commit了. 修改commit历史 ...
- git修改最后一次commit的内容
提交修改 $ git add test.txt $ git commit -m "提交test.txt文件" 修改注释说明 如果需要修改commit的注释说明,则执行以下命令: $ ...
- Git自动化合并多个Commit
目录 git rebase逻辑 git editor的修改 处理git-rebase-todo文件 Python实现 当我们有多个commit或者从开源处拿到多个commit时,想合成一个commit ...
- 修改git以往历史中所有commit的name和email
当换了新的电脑设备或者在 homestead 中使用 git 的时候:如果忘了 git config 设置用户名和邮箱:这样当 git commit 的时候就会使用设备名作为 git 用户名:或者我们 ...
- git push 提交某一个commit
(以下情况是我们的一位开发小哥哥遇到了提交失败,来找我,我给他解决的过程,以前我也没遇到,所以记录下来) 我们会遇到这样的情况,在develop分支上,第一天修改的文件,已经执行了git commit ...
- [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 ...
- git第四节----git commit message
@git commit message 什么是git commit message :git commit -m '每次提交时编辑的内容' git commit message的好处: 1 ...
随机推荐
- Nginx 状态信息功能配置
Nginx 状态信息功能介绍 Nginx 有一个 ngx_http_stub_status_module 模块,主要功能是记录 Nginx 的基本访问状态信息,让使用者了解 Nginx 的工作状态 要 ...
- 老司机在zabbix上的一次翻车
[前言] 自以为是zabbix的老司机了,没有想到今天翻车了! 一般人出错了都可以找到一个借口.我就不一样啦,我感觉我可以找两个1): 针对官方文档 给出的操作步骤没有经过深入的思考 2): 今天没有 ...
- Hexo NexT 博客后台管理指南
上篇文章讲到,将Hexo NexT 博客成功上传到GitHub 并绑定到我们自定义的域名下了. 但是却还是有个问题,那就是Hexo NexT 博客如何进行后台管理呢? 如果总是通过手动创建文件的方式, ...
- 记一次性能优化,限制tcp_timewait数量,快速回收和重用
前言 这篇文章的主题是记录一次Python程序的性能优化,在优化的过程中遇到的问题,以及如何去解决的.为大家提供一个优化的思路,首先要声明的一点是,我的方式不是唯一的,大家在性能优化之路上遇到的问题都 ...
- N个降序数组,找到最大的K个数
问题定义 这个问题来自网上看到的百度算法题,感觉很不错,问题定义如下: 假定有20个有序数组,每个数组有500个数字,降序排列,数字类型32位uint数值,现在需要取出这10000个数字中最大的500 ...
- 【iCore4 双核心板_ARM】例程十四:FATFS实验——文件操作
实验现象: 核心代码: int main(void) { int i,j; FIL file; FATFS fatfs; static FRESULT res; unsigned ]; unsigne ...
- 水塘抽样(Reservoir Sampling)问题
水塘抽样是一系列的随机算法,其目的在于从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况. 在高德纳的计算机程序设计艺术中,有如下问题: ...
- Weka算法Clusterers-Xmeans源代码分析(一)
<p></p><p><span style="font-size:18px">上几篇博客都是分析的分类器算法(有监督学习),这次就分 ...
- Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
Web应用程序目录下有帮助文档,是中文名称的Word文件 超链接内容如下: <a href="jsp/plugin/用户手册.doc">用户手册</a> 开 ...
- Scala学习笔记——函数式对象
用创建一个函数式对象(类Rational)的过程来说明 类Rational是一种表示有理数(Rational number)的类 package com.scala.first /** * Creat ...