作為git最常用的幾個命令git status、git add、git commit,我們每天可能都會寫個數(shù)十遍。但是越是這種我們熟悉的操作,越容易存在一些我們忽略的細節(jié)。這篇文章就是用來記錄下這些細節(jié),記錄我們常用命令中不常用的操作。
在git中編輯過某些文件之后,由于自上次提交后你對它們做了修改,git 將它們標記為已修改文件。 我們逐步將這些修改過的文件放入暫存區(qū),然后提交所有暫存了的修改,如此反復。所以使用 git 時文件的生命周期如下:

回顧完就進入正題
git status
git status會有以下幾種狀態(tài)
$ Changes to be committed:
$ (use "git reset HEAD <file>..." to unstage)
表示已經(jīng)在暫存區(qū),等待添加到工作區(qū)。使用git reset命令可以將暫存區(qū)的內(nèi)容移除。
$ 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)
有修改, 但是沒有被添加到暫存區(qū)。使用git add命令可以將文件添加到暫存區(qū),使用git checkout命令可以撤銷文件修改。
$ Untracked files:
$ (use "git add <file>..." to include in what will be committed)
含有未跟蹤文件, 即未納入版本管理的文件。使用git add可以將文件放入暫存區(qū)。
git add
添加文件到暫存區(qū)
git add file
添加多個文件到暫存區(qū),空格隔開
git add file1 file2
使用通配符批量添加documentation目錄下的所有txt后綴文件
git add documentation/*.txt
添加當前目錄下的所有git-開頭的shell文件
git add git-*.sh
將修改和以刪除的文件添加到暫存區(qū),不包括未被跟蹤文件。
git add -u file
git add .和git add -A(即git add --all)區(qū)別
一.版本導致的差別:
1.x版本:
(1).git add -A可以提交未跟蹤、修改和刪除文件。
(2).git add .可以提交未跟蹤和修改文件,但是不處理刪除文件。
2.x版本:
兩者功能在提交類型方面是相同的。
二.所在目錄不同導致的差異:
(1).git add -A無論在哪個目錄執(zhí)行都會提交相應文件。
(2).git add .只能夠提交當前目錄或者它后代目錄下相應文件。
git commit
當我們執(zhí)行git add命令將文件放到暫存區(qū)之后,還需要提交這些暫存到工作區(qū)(倉庫區(qū)),從暫存區(qū)->工作區(qū),的工作就是git commmit來做的。
# 提交暫存區(qū)到倉庫區(qū),message為提交信息
git commit -m [message]
# 提交可以指定文件
git commit [file1] [file2] ... -m [message]
常用的commit擴展命令
# 提交時顯示所有diff信息
git commit -v
# 使用一次新的commit,替代上一次提交,如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息
git commit --amend
# 重做上一次commit,并包括指定文件的新變化
git commit --amend [file1] [file2]
以上三條如果不帶-m [message]將會在vim的編輯器中添加提交信息。
如果你感覺沒有git add,git commit有點麻煩,想直接將修改到工作區(qū),可以用另外一個命令。
# 會將上次commit之后的變化,直接添加到工作區(qū)
git commit -a -m [message]
git rm
rm file
刪除位置:相當于手動右擊點刪除,只刪除了工作區(qū)的文件。
git status:Changes not staged for commit:
恢復:直接用git checkout -- file就可以。
git rm file
它等價于rm file + git add file
刪除位置:相當于不僅刪除了文件,而且還添加到了暫存區(qū)。
git status:Changes to be committed:。
恢復:先git reset,去掉暫存區(qū)修改,然后再git checkout -- file,恢復文件。
git rm --cached file
刪除位置:從暫存區(qū)移除,不刪除文件。
git status:Changes to be committed:,Untracked files:
恢復:git add file