功能
將暫存區中的更改記錄到倉庫。
加到staging area里面的文件,是表示已經准備好commit的。所以在commit修改之前,務必確定所有修改文件都是staged的。對於unstaged的文件,git commit后也不會被記錄。
參數
不帶參數
最簡單的提交命令是
$ git commit
這種方式會啟動文本編輯器以便輸入本次提交的說明。 (默認會啟用 shell 的環境變量 $EDITOR 所指定的軟件,一般都是 vim 或 emacs。當然也可以使用 git config --global core.editor 命令設定你喜歡的編輯軟件。)編輯器會顯示類似下面的文本信息(本例選用 Vim 的屏顯方式展示):

# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # new file: README # modified: CONTRIBUTING.md # ~ ~ ~ ".git/COMMIT_EDITMSG" 9L, 283C
可以看到,默認的提交消息包含最后一次運行 git status 的輸出,放在注釋行里,另外開頭還有一空行,供你輸入提交說明。 你完全可以去掉這些注釋行,不過留着也沒關系,多少能幫你回想起這次更新的內容有哪些。 (如果想要更詳細的對修改了哪些內容的提示,可以用 -v 選項,這會將你所做的改變的 diff 輸出放到編輯器中從而使你知道本次提交具體做了哪些修改。) 退出編輯器時,Git 會丟掉注釋行,用你輸入提交附帶信息生成一次提交。
-m
在 commit 命令后添加 -m 選項,將提交信息與命令放在同一行,如下所示:

$ git commit -m "Story 182: Fix benchmarks for speed" [master 463dc4f] Story 182: Fix benchmarks for speed 2 files changed, 2 insertions(+) create mode 100644 README
好,現在你已經創建了第一個提交! 可以看到,提交后它會告訴你,當前是在哪個分支(master)提交的,本次提交的完整 SHA-1 校驗和是什么(463dc4f),以及在本次提交中,有多少文件修訂過,多少行添加和刪改過。
請記住,提交時記錄的是放在暫存區域的快照。 任何還保留unstaged 且 modified狀態的文件,可以在下次提交時納入版本管理。 每一次運行提交操作,都是對你項目作一次快照,以后可以回到這個狀態,或者進行比較。
-a
使用暫存區域可以讓我們精心准備要提交的細節,但有時候這么做略顯繁瑣。 Git 提供了一個跳過使用暫存區域的方式, 只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把所有tracked且modified的文件暫存起來一並提交,從而跳過 git add 步驟:

$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: CONTRIBUTING.md no changes added to commit (use "git add" and/or "git commit -a") $ git commit -a -m 'added new benchmarks' [master 83e38c7] added new benchmarks 1 file changed, 5 insertions(+), 0 deletions(-)
看到了嗎?提交之前不再需要 git add 文件“CONTRIBUTING.md”了。
--amend
如果你很早之前就commit,后來發現有幾個文件忘記一起提交了。又或者commit的時候你搞錯了提交注釋信息。如果你想重新再提交一次,請使用--amend選項。
由於git commit的工作原理是提交暫存區中的變化。所以如果在上次提交后馬上執行了此命令,那么暫存區中是沒有變化的,此時git commit --amend修改的只是提交信息(commit message,就是-m時后面寫的注釋那句話)
如果你提交后發現忘記了暫存某些需要的修改,可以像下面這樣操作:

$ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend
最終你只會有一個提交 - 第二次提交將代替第一次提交的結果。