7.時光倒流

小白的故事

本故事純屬虛構,若有雷同,^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記錄有時候不少,你能夠不停的按jk來實現向下或向上查看內容,不行看了,就輸入: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「老鳥說道。

小白豁然開朗,原來歷史是能夠任意切換的,並非回退了就抹除了。

小結

  1. 解決亂碼 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

  1. 查看歷史 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次提交

  2. 歷史切換 git reset HEAD^能夠向前撤銷一次,多個^能夠撤銷多條歷史,或者使用git reset HEAD~5這樣能夠一次撤銷5條歷史 git reset能夠任意切換到某個歷史,使用git reset --hard commitid便可,commit id不必定要全的,能夠只寫前幾位

相關文章
相關標籤/搜索