前面的話

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

 

理論

  要了解git commit -m與git commit -am的區(qū)別,首先要明白它們的定義

  字面解釋的話,git commit -m用于提交暫存區(qū)的文件,git commit -am用于提交跟蹤過的文件

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

  定義中出現(xiàn)了暫存區(qū)、跟蹤過的文件等術(shù)語,如果要理解它們,就需要了解Git的文件狀態(tài)變化周期

萬碼學(xué)堂,電腦培訓(xùn),計算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

  工作目錄下面的所有文件都不外乎這兩種狀態(tài):已跟蹤(tracked)或未跟蹤(untracked)。已跟蹤的文件是指本來就被納入版本控制管理的文件,在上次快照中有它們的記錄,工作一段時間后,它們的狀態(tài)可能是未更新(unmodified),已修改(modified)或者已放入暫存區(qū)(staged)

 

實(shí)例

  下面以一個實(shí)例來進(jìn)行說明

  1、在項目文件夾中新增一個文件如'a.txt'時,該文件處于未跟蹤狀態(tài)(untracked)。未跟蹤狀態(tài)的文件是無法提交的

萬碼學(xué)堂,電腦培訓(xùn),計算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

  2、接下來,使用git add a.txt,使其變成已跟蹤狀態(tài)(tracked)

萬碼學(xué)堂,電腦培訓(xùn),計算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

  3、這時,如果使用git commit -m 'add a.txt'就可以順利提交了

萬碼學(xué)堂,電腦培訓(xùn),計算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

  4、但是,git commit -m 和 git commit -am的區(qū)別在哪里?在于a.txt文件修改之后的處理

  下面,向a.txt添加內(nèi)容'a'。可以看出,文件a.txt處于已跟蹤(tracked),但未暫存狀態(tài)(unstaged)

萬碼學(xué)堂,電腦培訓(xùn),計算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

  5、這時,如果使用git commit -m是無法提交最新版本的a.txt的,提交的只是最開始空內(nèi)容的舊版本a.txt

萬碼學(xué)堂,電腦培訓(xùn),計算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

  6、而如果使用git commit -am,則可以省略git add a.txt這一步,因為git commit -am可以提交跟蹤過的文件,而a.txt一開始已經(jīng)被跟蹤過了

萬碼學(xué)堂,電腦培訓(xùn),計算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

 

總結(jié)

  這兩個命令的區(qū)別的關(guān)鍵就是git add命令

  git add命令是個多功能命令,根據(jù)目標(biāo)文件的狀態(tài)不同,此命令的效果也不同:可以用它開始跟蹤新文件,或者把已跟蹤的文件放到暫存區(qū),還能用于合并時把有沖突的文件標(biāo)記為已解決狀態(tài)等

  我們需要用git add命令來跟蹤新文件,但如果使用git commit -am可以省略使用git add命令將已跟蹤文件放到暫存區(qū)的功能

http://www.cnblogs.com/xiaohuochai/p/6664451.html