麻煩解答下 git commit -m 與 git commit -am 的差別
當修改已經通過git add <change file>将其添加到stage,可以通过git commit -m "<message>"为这所有已经进入stage的改变添加一个commit信息。什么是在stage中?看下面
git add <change file>
stage
git commit -m "<message>"
commit
如果你的文件之前已經提交過,但這次的改動還沒進stage,如下:
可以直接使用git commit -am "",將所有修改,但未進git commit -am "<message>",将所有修改,但未进stage的改动加入stage,并记录commit信息。(某种程度上相当于git add和git commit -m的组合技,前提是被改动文件已经是tracked的改動加入
git commit -am ""
git commit -am "<message>"
git add
git commit -m
tracked
git commit -am "str" #等同于 git commit -a -m "str"
我們運行下
man git commit
來取得a參數的意義即知區別了。
a
OPTIONS -a, --allTell the command to automatically stage files that have been modified and >deleted, but new files you have not told Git about are not affected. 意思是說
OPTIONS -a, --allTell the command to automatically stage files that have been modified and >deleted, but new files you have not told Git about are not affected.
拓展
git add . git commit -m "some str" git push
這三大步,而實際上,你只需要兩個指令就夠了,除非有新的檔案要被加進去。
git commit -am "some str" git push
字面解釋的話,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 add <change file>
将其添加到stage
,可以通过git commit -m "<message>"
为这所有已经进入stage
的改变添加一个commit
信息。什么是在stage
中?看下面如果你的文件之前已經提交過,但這次的改動還沒進
stage
,如下:可以直接使用
,並記錄git commit -am ""
,將所有修改,但未進git commit -am "<message>"
,将所有修改,但未进stage
的改动加入stage
,并记录commit
信息。(某种程度上相当于git add
和git commit -m
的组合技,前提是被改动文件已经是tracked
的改動加入commit
資訊。 (某種程度上相當於git add
和git commit -m
的組合技,前提是被改動檔案已經是tracked
)🎜我們運行下
來取得
自動把目前所有修改和刪除檔案放到堆疊上,但你沒有加入過的不會受影響。a
參數的意義即知區別了。通常我們提交git的時候都是
這三大步,而實際上,你只需要兩個指令就夠了,除非有新的檔案要被加進去。
字面解釋的話,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指令將已追蹤文件放到暫存區的功能