git commit -m与-am的区别

前面的话

  使用git commit -am是不是就可以完全不使用git add命令呢?不是

理论

  要了解git commit -m与git commit -am的区别,首先要明白它们的定义

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

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

  定义中出现了暂存区、跟踪过的文件等术语,如果要理解它们,就需要了解Git的文件状态变化周期

  工作目录下面的所有文件都不外乎这两种状态:已跟踪(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 和 git commit -am的区别在哪里?在于a.txt文件修改之后的处理

  下面,向a.txt添加内容‘a‘。可以看出,文件a.txt处于已跟踪(tracked),但未暂存状态(unstaged)

  5、这时,如果使用git commit -m是无法提交最新版本的a.txt的,提交的只是最开始空内容的旧版本a.txt

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

总结

  这两个命令的区别的关键就是git add命令

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

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

  欢迎交流

时间: 2024-10-23 02:30:44

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

git init,git add和git commit三者的区别和使用

git init(版本库初始化命令) $cd /usr/local $mkdir demo $cd demo $git init 之后可以在demo目录下看到看到一个.git隐藏文件夹,这个文件夹就是版本库,而demo目录及其子目录就是工作区. git add(将工作区文件提交到暂存区stage) $touch welcome.txt $git add 文件welcome.txt从工作区被提交到暂存区,但此时文件并没有真正进入到版本库当中,文件目前只处于一个中间状态. git commit(将暂

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

字面解释的话,git commit -m用于提交暂存区的文件:git commit -am用于提交跟踪过的文件 要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示 工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪.已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区 下面以一个实例说明 在项目文件夹中新增一个文件如'a.txt'时,该文件处于untracked未跟踪状态.未跟踪状态的文件是无

对比git rm和rm的使用区别

在这里说一下git rm和rm的区别,虽然觉得这个问题有点肤浅,但对于刚接触git不久的朋友来说还是有必要的. 用 git rm 来删除文件,同时还会将这个删除操作记录下来:用 rm 来删除文件,仅仅是删除了物理文件,没有将其从 git 的记录中剔除. 直观的来讲,git rm 删除过的文件,执行 git commit -m "abc" 提交时,会自动将删除该文件的操作提交上去. 而用 rm 命令直接删除的文件,单纯执行 git commit -m "abc" 提交

为什么要先 git add 才能 git commit

1. git 的 add ,是一个容易引起疑问的命令.在 subversion 中的 svn add 动作是将某个文件加入版本控制,而 git add的意义完全不同. 同时, git diff --cached 是比较 stage 的文件的差异的,也是一个不直观的命令. github 2008年的blog中,也提到,容易引起混淆:https://github.com/blog/196-gittogether-2008http://learn.github.com/p/normal.html th

Git分支merge和rebase的区别

Git merge是用来合并两个分支的. git merge b # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当前分支 原理 如下: 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支. $ git checkout -b mywork origin 假设远程分支"origin"已经有了2个提交,如图 现在我们在这个分支做一些修改,然后生成两个提交(commit). $ vi file.t

Git中将git add 与 git commit合并

修改hello.php文件 vim hello.php <?php         echo "hello world!"; ?> 查看hello.php文件 cat hello.php 查看项目文件状态 git status -s add与commit合并操作 git commit -am "合并提交" 命令行输出

如何把apk编译时间和最后次git commit的sha值,写入到app中

需求背景:我们修复Bug的时候,频繁提交APK包,导致测试同学搞不清哪个包才是最新的 比如一个版本3.0.1,我们可能后续基于这个版本陆续提交了好几个修复包 同时,如果服务端ip地址能在界面上配置的话,更好了 以上都是基于debug模式下的,线上版本不会出现这些选项 思路:git每次提交commit的时候,都会创建一个唯一的sha串,我们拿这个作为内部版本号. 先给上最终效果图 那么如何在gradle编译的时候,就把这些信息写入到app中呢 关键字 BuildConfig类. 在build.gr

git reset soft,hard,mixed之区别深解

GIT reset命令,似乎让人很迷惑,以至于误解,误用.但是事实上不应该如此难以理解,只要你理解到这个命令究竟在干什么. 首先我们来看几个术语 HEAD 这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交 Index index也被称为staging area,是指一整套即将被下一个提交的文件集合.他也是将成为HEAD的父亲的那个commit Working Copy working copy代表你正在工作的那个文件集 Flow 当你第一次checkout一个分支,HEAD就指向当前

关于git和SVN的介绍和区别

主要对git,svn进行一个简单的介绍. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2   一.git.cvs.svn的区别 cvs.svn都是集中式的版本控制系统,而git是分布式版本管理系统. 集中式版本控制系统: 集中式版本控制系统,版本库是集中存放在中央服务器的,而大家工作