復習
在前兩篇文章中主要學習了怎么初始化git倉庫,如何將文件添加和提交到倉庫,以及從倉庫中將版本回退。對應的操作命令分別為:
- git init
- git add <fileName>
- git commit <fileName> -m"message"
- git reset --hard HEAD^
git reset --hard HEAD~20
git reset --hard commitID
理解Git倉庫
在我們最開始用git init命令時相當于是初始化了一個倉庫,當然這個時候倉庫是還沒有東西的。使用git add命令就是相當于告訴git我們需要將哪些文件列入跟蹤清單,而git commit命令就是將清單上的文件提交保存到git倉庫。
git一共有三個區(qū)域:工作區(qū),暫存區(qū)及本地倉庫。工作區(qū)就是編輯文件時的區(qū)域,使用git add命令就是將我們工作區(qū)域的文件提交到了暫存區(qū),同時使用該命令后,文件才被git跟蹤。git commit命令就是將暫存區(qū)的文件提交到了倉庫。
被git跟蹤后的文件對應三種狀態(tài):已修改(modified)、已暫存(staged)、已提交(commited)。
現(xiàn)在捋一下流程。
第一步:git init 在某個文件夾下創(chuàng)建了一個git 倉庫,就是.git文件夾。
第二步:我們新建了一個文件,噼里啪啦寫了很多東西,這個時候?qū)υ撐募牟僮骶褪窃诠ぷ鲄^(qū)。然后我們用git add命令就是將該文件放到了暫存區(qū),此時該文件的狀態(tài)就是已暫存(staged)狀態(tài)。
第三步:用git commit命令將暫存區(qū)的文件提交到了本地倉庫,此時該文件的狀態(tài)就是已提交(commited)。
第四步:我們繼續(xù)對文件進行修改,此時文件就是處于已修改(modified)狀態(tài),只有被git跟蹤過的(git add 過的)文件才有該狀態(tài),再次提交就是回到了上面流程。
從暫存區(qū)撤銷文件
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: helloGit.txt
上述命令(use "git reset HEAD <file>..." to unstage)告訴我們?nèi)绾螌捍鎱^(qū)的文件恢復到unstage狀態(tài)。使用git reset HEAD <file> 就是將暫存區(qū)文件恢復到工作區(qū)的狀態(tài)。
工作區(qū)撤銷修改
$ 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: helloGit.txt
上述命令告訴我們,我們可以使用git add命令將文件保存到暫存區(qū),也可以使用"git checkout -- <file>..."取消對文件的修改,變回之前未修改的狀態(tài)。這個操作需要謹慎使用,一旦使用該操作回到未修改前的狀態(tài)后,修改的內(nèi)容就再也找不回來了。
移除文件
要從Git倉庫中移除文件,必須要將文件從已被跟蹤的清單文件中移除(就是從暫存區(qū)移除),然后提交。有兩種操作方式:
- 第一種在工作區(qū)域手動刪除文件,然后add再commit。
- 第二種方式用
git rm <file>命令將其從暫存區(qū)刪除,再commit進本地倉庫。
對應第二種方式還有另外一個命令,git rm --cached <file> 該命令表示只將該文件從暫存區(qū)移除,但會保留在當前工作目錄中。此時位于工作區(qū)的文件處于已修改狀態(tài),如果又不想刪除了即可通過add再commit進倉庫。
修改最后一次的提交
有時候提交完文件發(fā)現(xiàn)注釋寫錯了或者還有幾個文件未提交,想要撤銷掉剛才的提交,可以使用git commit --amend重新提交。
如果上次提交完后的暫存區(qū)文件與現(xiàn)在的工作目錄對比,文件內(nèi)容上沒有改動,運行該命令就只是修改上次提交的注釋說明。如果有文件改動,我們可以先將文件add進暫存區(qū),然后使用該命令提交,相當于是在上次的基礎(chǔ)上追加了文件提交。然后用git log查看日志,會發(fā)現(xiàn)兩次的提交最終的結(jié)果是第二次的區(qū)域快照。
補充
git commit -a / -am "message" 命令是將add、與commit 兩個步驟合二為一了。但該命令不能操作Untracked的文件,意思就是只有已經(jīng)加入到跟蹤清單中的文件(之前被add進暫存區(qū)的)才能將兩個步驟合二為一。
使用git log命令查看日志,日志很多時一般會顯示前三個,然后一直按回車會顯示剩余的log,這時候輸入英文Q即可退出。
使用git commit命令時會進入vim編輯器,按i鍵進入編輯模式,輸入完提交的注釋信息后按esc退出編輯模式,然后輸入:wq即可保存退出。