【Git】三、版本回退&撤消修改&文件刪除


提要

//查看git操作日志
$ git log                           
//單行格式查看操作日志           
$ git log --pretty=oneline
//還原操作到上一次版本,有幾個^就上幾次            
$ git reset --hard HEAD^  
//還原操作到某一次版本,后面的是版本code          
$ git reset --hard e6ded2 
//撤銷修改,在add之前的修改,撤銷工作區中的修改           
$ git checkout -- testgit.txt   
//撤銷修改,在add之后的修改,撤銷到add前       
$ git reset HEAD testgit.txt 
//刪除工作區中的文件        
$ rm test.txt                                 

一、版本查看

多次提交后可以通過指令查看歷史提交記錄

$ git log
commit a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 (HEAD -> master)
Author: shane <ls199242@163.com>
Date:   Sat Jul 1 11:23:53 2017 +0800

    test commit,2 files is commited

commit 81a320cda2e80405cb9e4c92c236bc7289eaf0f8
Author: shane <ls199242@163.com>
Date:   Sat Jul 1 10:47:47 2017 +0800

    readme file

以上是詳細信息的版本,可以使用指令只呈現一行,看起來比較清晰

$ git log --pretty=oneline
e6ded21d1de20d8ea2b847e9a35ac50fcabfac70 (HEAD -> master) test commit2
a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 test commit,2 files is commited
81a320cda2e80405cb9e4c92c236bc7289eaf0f8 readme file

這個是又提交了一次的歷史log,--pretty=oneline表示用一行的格式顯示提交
前面一串是提交版本的id,HEAD表示當前版本,id后面跟着的是提交的content

二、版本回退

查看指令后如果最近一次提交有錯誤想要回退到前一次,可以使用指令重置,類似於游戲里的讀檔

$ git reset --hard HEAD^
HEAD is now at a50498c test commit,2 files is commited

使用指令reset就可以還原到某一次提交,HEAD^表示還原到上一個版本,如上例中的a50498c 版本
有幾個^就回退幾個版本,如果版本較多可以寫成HEAD~n,n代表回退的版本個數
此時再查看log

$ git log
commit a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 (HEAD -> master)
Author: shane <ls199242@163.com>
Date:   Sat Jul 1 11:23:53 2017 +0800

    test commit,2 files is commited

commit 81a320cda2e80405cb9e4c92c236bc7289eaf0f8
Author: shane <ls199242@163.com>
Date:   Sat Jul 1 10:47:47 2017 +0800

    readme file

三、回退錯誤的還原

此時最后一次的提交log已經沒有了,如果還原錯了,只要有最后一次提交的版本id,也是可以撤銷還原的,再回到最后一次的版本

$ git reset --hard e6ded21d1de20d8ea2b847e9a35ac50fcabfac70
HEAD is now at e6ded21 test commit2

如果你找不到id,git提供了一個指令,可以回溯你的每一次操作,即使你關掉了git bash 第二天再打開,也是可以看到記錄的

$ git reflog
e6ded21 (HEAD -> master) HEAD@{0}: reset: moving to e6ded21d1de20d8ea2b847e9a35ac50fcabfac70
a50498c HEAD@{1}: reset: moving to HEAD^
e6ded21 (HEAD -> master) HEAD@{2}: commit: test commit2
a50498c HEAD@{3}: commit: test commit,2 files is commited
81a320c HEAD@{4}: commit (initial): readme file

在這里就能找到最后一次提交的id是e6ded21,然后再reset到這個版本就好了

四、撤銷修改

撤銷修改有兩種場景

4.1在add進暫存區之前的修改撤銷

當你在工作區修改了一部分文件,但是又想舍棄修改的時候,一個一個還原會很麻煩,這時git提供了一個指令

$ git checkout -- testgit.txt

git checkout -- 文件名,指對這個文件進行還原,--很重要,如果不加--表示切換到某個分支

4.2在add進暫存區之后的修改撤銷

如果你要舍棄的修改已經add到了暫存區,需要使用以下指令

$ git reset HEAD testgit.txt

git reset HEAD 文件名,表示將當前master分支暫存區的文件testgit.txt unstage到工作區,然后在使用checkout指令撤銷修改即可

五、文件刪除

如果你新建了一個文件,並且add、commit到了本地分支,然后你想把他刪除,可以使用以下指令

$ rm test.txt

rm 我猜是remove的意思,這個指令只是刪除工作區中的文件,git會檢測到test.txt 有修改
此時如果確實要刪除文件並提交,需要先執行git中的文件刪除,即相當於把刪除的修改add到暫存區,再進行提交

$ git rm test.txt
rm 'test.txt'
$ git commit -m "delete test.txt"
[master e8c7ff0] delete test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

若是誤刪,和上面修改文件還原操作一致,先使用git reset HEAD filename ,再使用git checkout -- filename,進行還原


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM