本故事純屬虛構,若有雷同,^0^那可太巧了git
小白正在開心的寫代碼,剛剛完成了產品小夥伴的一個需求。仍是小有成就感的,正準備起來活動活動喝杯水。誰知產品小夥伴有風風火火的跑過來。vim
「小白,小白,客戶仍是感受之前的交互方式用着順手。讓把功能改回去」。產品小夥伴喊道。 聽到這個消息,小白滿臉的黑線。廢了半天勁作出來的功能再改回去。這太坑了吧。bash
可是沒辦法,誰叫客戶就是上帝呢,改吧。編輯器
開始撤銷,ctrl z
。。。ui
what,無法撤銷了?編輯器撤銷的步驟有限,這可如何是好啊,難道要手動改代碼?這也太悲劇了吧。編碼
「對了找大神問一下,看git有沒有辦法回退」小白靈光一閃想起來老鳥。spa
老鳥一聽到小白喊他「大神」,瞬間心情舒暢跑過來知道小白。3d
「你是要回退之前的版本嗎?」老鳥問道。 「恩恩」小白點頭 「回退其實很簡單,看我操做,要記住啊」說完,作到小白的坐位上開始了他的神操做。日誌
「首先用git log
看一下你的提交記錄」,老鳥說道code
$ git log
Author: shooke <xingjiehu@163.com>
Date: Sat Mar 14 16:45:03 2020 +0800
<E7><8A><B6><E6><80><81><E4><BF><AE><E6><94><B9><E5><92><8C><E5><AF><B9><E6><AF><94><E6><97><B6><E9><97><B4>
commit 3e14b6822063c7add663cd79756e77818e821819
Author: shooke <xingjiehu@163.com>
Date: Sat Mar 14 00:30:27 2020 +0800
<E5><AE><A1><E6><A0><B8><E7><8A><B6><E6><80><81><E4><BF><AE><E6><94><B9>
複製代碼
「咦,你這裏git log竟然亂碼啊」,老鳥說道
「這是咋回事啊」,小白疑惑
「好辦,編碼問題解決一下就能夠了」。老鳥輸入了以下三條命令
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
export LESSCHARSET=utf-8
複製代碼
再次執行git log
果真好了
git log
commit 6531ff6013dd490f60bcd646ca01df61a1ecc8b1 (HEAD -> dev, origin/master, origin/dev, origin/HEAD, master)
Author: shooke <xingjiehu@163.com>
Date: Sat Mar 14 16:45:03 2020 +0800
狀態修改和對比時間
commit 3e14b6822063c7add663cd79756e77818e821819
Author: shooke <xingjiehu@163.com>
Date: Sat Mar 14 00:30:27 2020 +0800
審覈狀態修改
...
複製代碼
"log記錄有時候不少,你能夠不停的按j
和k
來實現向下或向上查看內容,不行看了,就輸入:q
退出。就跟vim編輯器使用方式同樣"老鳥說。
"想要退回到那裏,用git reset
會退到對應的commit id就能夠了。好比會退到審覈狀態修改
。老鳥邊說變執行命令
git reset --hard 3e14b6822063c
複製代碼
打開編輯器,小白髮現,代碼真的回到之前了。
「大神,commit id怎麼輸入了一部分啊,不須要所有輸入嗎」,小白激動說道
「不須要,只要git可以肯定惟一的commit就好了,通常也就輸入前幾位」,老鳥說。
「每次都要看commit id好麻煩啊,有沒有簡單的方法?」小白謙虛問道
「固然有啊,能夠用HEAD加上^
或者~n
回退啊」。老鳥說
git reset --hard HEAD^
複製代碼
「這樣就會回退一條commit,若是退兩條,就再加一個^,退幾條就加幾個^"老鳥說
」那退20條,豈不是20個^,多麻煩啊「,小白說
」孺子可教啊,這要用~n了,能夠這樣寫「,老鳥說
git reset --hard HEAD~20
複製代碼
"明白了,謝謝大神"小白說道。
」你剛纔要回退到那條commit啊「老鳥問道
」啊,我只須要退一條就好了,我們剛纔退了這麼多,怎麼辦啊「小白說
」這怕啥,你只要知道歷史中的commit id,就不用擔憂,及時你回退了50條,要回到第二條也沒問題「老鳥邊說變敲下哦了命令
git reset --hard 3e14b6822063c7add663cd79756e77818e821819
複製代碼
」你看這不是回到你第二條命令時的狀態了嗎,只要你記得回退前的commit id,隨時能夠穿梭到任何commit「老鳥說道。
小白豁然開朗,原來歷史是能夠任意切換的,並非回退了就抹除了。
git config --global i18n.commitencoding utf-8
該命令表示提交命令的時候使用utf-8編碼集提交git config --global i18n.logoutputencoding utf-8
該命令表示日誌輸出時使用utf-8編碼集顯示
export LESSCHARSET=utf-8
設置LESS字符集爲utf-8,爲了讓配置一直有效,能夠把這個設置添加到~/.bashrc
,而後執行source ~/.bashrc
查看歷史 git log
能夠查看歷史。可是若是用git reset
回退了,是看不到被退回的歷史的,若是要保證歷史,可使用git revert
,後面會講這個命令 git log --stat
顯示commit歷史,以及每次commit發生變動的文件 git log -S [keyword]
搜索提交歷史,根據關鍵詞 git log [tag] HEAD --pretty=format:%s
顯示某個commit以後的全部變更,每一個commit佔據一行 git log [tag] HEAD --grep feature
顯示某個commit以後的全部變更,其"提交說明"必須符合搜索條件 git log --follow [file]
或git whatchanged [file]
顯示某個文件的版本歷史,包括文件更名 git log -p [file]
顯示指定文件相關的每一次diff git log -5 --pretty --oneline
顯示過去5次提交
歷史切換 git reset HEAD^
能夠向前撤銷一次,多個^
能夠撤銷多條歷史,或者使用git reset HEAD~5
這樣能夠一次撤銷5條歷史 git reset
能夠任意切換到某個歷史,使用git reset --hard commitid
便可,commit id不必定要全的,能夠只寫前幾位