git commit -m與git commit -am的區別
字面解釋的話,git commit -m用於提交暫存區的檔案;git commit -am用於提交跟蹤過的檔案
如果你的檔案之前已經通過git add <change file>
將其新增到stage
,並通過git commit -m "<message>"
為這所有已經進入stage
的改變新增一個commit
資訊,但之後的改動還沒有進stage
時,可以理解為某種程度上相當於git add
和git commit -m
的組合技,前提是被改動檔案已經是tracked
要理解它們的區別,首先要明白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'的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命令將已跟蹤檔案放到暫存區的功能。