1. 程式人生 > >git commit -m 與 git commit -am的區別

git commit -m 與 git commit -am的區別

解釋 兩個 str 效果 如果 控制 mit txt 這一

字面解釋的話,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的區別