前面的話
使用git commit -am是否是就能夠徹底不使用git add命令呢?不是git
理論
要了解git commit -m與git commit -am的區別,首先要明白它們的定義post
字面解釋的話,git commit -m用於提交暫存區的文件,git commit -am用於提交跟蹤過的文件3d
[注意]git commit -am能夠寫成git commit -a -m,但不能寫成git commit -m -a版本控制
定義中出現了暫存區、跟蹤過的文件等術語,若是要理解它們,就須要瞭解Git的文件狀態變化週期blog
工做目錄下面的全部文件都不外乎這兩種狀態:已跟蹤(tracked)或未跟蹤(untracked)。已跟蹤的文件是指原本就被歸入版本控制管理的文件,在上次快照中有它們的記錄,工做一段時間後,它們的狀態多是未更新(unmodified),已修改(modified)或者已放入暫存區(staged)it
實例
下面以一個實例來進行說明class
一、在項目文件夾中新增一個文件如'a.txt'時,該文件處於未跟蹤狀態(untracked)。未跟蹤狀態的文件是沒法提交的im
二、接下來,使用git add a.txt,使其變成已跟蹤狀態(tracked)d3
三、這時,若是使用git commit -m 'add a.txt'就能夠順利提交了總結
四、可是,git commit -m 和 git commit -am的區別在哪裏?在於a.txt文件修改以後的處理
下面,向a.txt添加內容'a'。能夠看出,文件a.txt處於已跟蹤(tracked),但未暫存狀態(unstaged)
五、這時,若是使用git commit -m是沒法提交最新版本的a.txt的,提交的只是最開始空內容的舊版本a.txt
六、而若是使用git commit -am,則能夠省略git add a.txt這一步,由於git commit -am能夠提交跟蹤過的文件,而a.txt一開始已經被跟蹤過了
總結
這兩個命令的區別的關鍵就是git add命令
git add命令是個多功能命令,根據目標文件的狀態不一樣,此命令的效果也不一樣:能夠用它開始跟蹤新文件,或者把已跟蹤的文件放到暫存區,還能用於合併時把有衝突的文件標記爲已解決狀態等
咱們須要用git add命令來跟蹤新文件,但若是使用git commit -am能夠省略使用git add命令將已跟蹤文件放到暫存區的功能
歡迎交流