不可不知的版本控制系統Git No.2-本地數據庫中Git可以做到的事情?(下)
這篇文章是繼續深入研究在上傳到遠端數據庫前還有哪些實用的指令碼。
commit紀錄查詢及修改
詳談 git log 查詢紀錄
一般狀況下,使用$ git log
就可以查詢到所有commit的紀錄,但有時候只是想查看某一個commit的詳細紀錄,或是想快速知道每個commit紀錄的內容,或是想查詢特定內容的commit紀錄,這時候就有不同的參數可以搭配使用。
簡單的commit紀錄
1
$ git log --oneline
commit紀錄摘要
1
$ git log --stat
commit紀錄圖形化
1
$ git log --graph
列出某幾位作者發表的commit紀錄
如果要找多位作者的話,請記得用 \ (反斜線)和 | (或)。1
$ git log --author='Mark(\|Celeste)'
列出符合指定字串的commit紀錄
1
$ git log --grep='P'
列出修改的檔案內容有指定字串的commit紀錄
1
$ git log -S'box'
列出某段日期的commit紀錄
–before=’2020-05-25’ => 2020/05/25 之前。
–after=’2020-05-21’ => 2020/05/21 之後。
2個參數都可以單讀使用,或結合其他參數使用。1
$ git log --before='2020-05-25' --after='2020-05-21'
列出某段時間的commit紀錄
–since=’6pm’ => 下午6點之後。
–until=’9pm’ => 下午9點之前。
2個參數都可以單讀使用,或結合其他參數使用。1
$ git log --since='6pm' --until='9pm'
接下來就來講講儲存在本地數據庫後,Git還可以做些甚麼…。
修改commit紀錄
修改最後一次commit紀錄的註解內容
1
$ git commit --amend -m '修改的註解內容'
追加檔案到最後一次的commit裡
1
$ git commit --amend --no-edit
必須先將檔案加入(
$ git add .
)到索引區,才可以利用$ git commit --amend --no-edit
來將索引區內的檔案加入到最後一次的commit裡,而不用在新增一個commit紀錄。
reset的功用
在上一篇中有提到$ git reset HEAD <fileName>
可以將已經提交到索引區的檔案退回到工作目錄區,其實$ git reset HEAD
也可以將檔案從本地數據庫退回到索引區,或是工作目錄區,亦或是全部刪除。
回到過去的reset
有2種使用reset的方法,以下有附圖:
相對模式
以HEAD為基準點,並使用~
或是^
往前還原,還原成前面第幾個commit紀錄內容就要取決於~
後面所加的數字。1
$ git reset HEAD~2
這個意思是還原到目前的HEAD提交紀錄的前2個提交紀錄。
絕對模式
1
$ git reset <SHA-1編號>
可以先使用
$ git log --oneline
查詢SHA-1編號,並直接用這個編號去做還原。
reset參數代表…
$ git reset
有幾個參數,分別代表了幾個不同的模式:
mixed
預設值,reset後會將檔案退回到工作目錄區,但是檔案內容還是最後一次commit過後的內容,如上圖。soft
reset後會將檔案退回到索引區,但是檔案內容還是最後一次commit過後的內容。hard
reset後檔案內容會變成還原的那次commit裡所儲存的檔案內容,如還原到第一次commit,就只會呈現第一次commit的檔案內容,之後所有有修改過的內容都會消失。
參數 | –mixed | –soft | –hard |
---|---|---|---|
經過多次commit修改的檔案內容 | 存在,並退回工作目錄區 | 存在,並退回退回索引區 | 消失,並完全還原成指定的commit紀錄所存的檔案內容 |
$ git log
所列出的紀錄是會受到$ git reset
的影響,只會列出還原的commit紀錄之前的紀錄,假如還原到第3次commit紀錄,那麼第4次之後的紀錄並不會顯示。
如果想知道詳細的commit紀錄(包含被reset過後的commit紀錄),可以透過$ git reflog
,這個指令列出的就是所有進行過的commit紀錄及reset紀錄。
從上圖可以看出,$ git reflog
列出了所有commit紀錄的變更(包含reset的紀錄)。
其他指令碼
刪除檔案
- 永久刪除
1
$ git rm index.html -f
- 變成未被追蹤(Untracked)的檔案
1
$ git rm index.html --cached
- 永久刪除
幫檔案改名
把index.html的檔名變成cart.html。1
$ git mv index.html cart.html
查詢每行程式碼最後編輯的詳細資訊
1
$ git blame index.html
圖中紅色框框即是commit提交紀錄的代碼。