git版本回退
參考
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000
mark下來,以後方便查找。
git 的版本回退操作步驟
git log 查看提交記錄
git log
從提交記錄裏面可看到提交的版本號,git和SVN的版本號不一樣,git的commit id不是1,2,3……遞增的數字,而是一個SHA1計算出來的一個非常大的數字,用十六進制表示.
黃色的字體跟在commit後面的就是提交的版本號。$ git reset –hard HEAD^
git reset --hard HEAD^
表示回退到上一個版本。繼續使用這條指令可以還可以繼續回退到上一個版本,但是步驟有點麻煩。git reset –hard 24f3f02cce00c646bd76b0283ff355fd28bc7dca
可以從log裏面的版本號直接回退到該版本號,版本號不用寫全,寫前面幾位數也可以,git會自動去找,例如:
git reset --hard 24f3f
這樣既可回到該版版號。git reflog
現在,你回退到了某個版本,關掉了電腦,第二天早上就後悔了,想恢復到新版本怎麼辦?找不到新版本的commit id怎麼辦?在tit中,總是有後悔藥可以吃的。git提供了一個命令
git reflog
用來記錄你的每一次命令。看到這些記錄的指令,你就可以使用git reset --hard
回到某個版本了。
git撤銷修改
沒有修改過的時候
當你沒有做過修改的時候使用
git status
查看狀態時會出現如下:$ git status On branch master nothing to commit, working tree clean
場景1:修改並未add
當你修改了本地的README.md,並未add和commit提交的時候,使用
git status
,出現如下提示:
這時候你直接改本地文件或者,使用git checkout --<file>...
可以放棄工作區的修改。例如:git checkout -- README.md
意思就是,把README.md文件在工作區的修改全部撤銷。你打開README.md查看就發現修改的唄撤銷了。場景2:已經add到緩存區了但未commit
假如你已經將修改多的文件add到了緩存區,想回退清空緩存區的時候。
git會友好的提示你change to be commited
也可以回退使用git reset HEAD <file>...
可以把暫存區的修改撤銷掉(unstage),重新放回工作區。
git reset
命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。再用git status
查看一下,現在暫存區是乾淨的,工作區有修改。可以使用放棄工作空間的修改git checkout -- README.md
意思就是,把README.md文件在工作區的修改全部撤銷
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout – file。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD ,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考上面的git版本回退,不過前提是沒有推送到遠程庫。
git查看工作區和版本庫裏面最新版本的區別
用
git diff
命令可以查看工作區和版本庫裏面最新版本的區別,也可以用git diff HEAD <file>
指定某個文件和最新本版本庫裏面的區別,例如指定README.md文件:git diff HEAD README.md
git rm刪除文件
在git 指令中可以用
git rm <file>
進行刪除文件。例如我要刪除已經提交的一個文件test.txt。直接使用git rm test.txt
就可以把該文件刪除了。查看刪除的狀態如圖:
現在你有兩個選擇,一是確實要從版本庫中刪除該文件,那就用命令git rm刪掉,並且git commit。另一種情況是刪錯了,因爲版本庫裏還有呢,所以可以很輕鬆地把誤刪的文件恢復到最新版本:$ git checkout -- test.txt
git checkout其實是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。