删除隐藏版本信息 版本回退_git之版本穿梭术
暫存區文件刪除
我們都清楚,我們要更新版本庫首先git add一個文件,這時候這個文件所做的修改就會添加到暫存區,但是這時候如果我們發現添加錯文件了,我們如何刪除暫存區的文件呢?這里一般來說有三種情況存在:暫存區存在一個文件hello.txt,我們需要從暫存區刪除這個文件,但是工作區文件不能刪除。
暫存區存在一個文件hello.txt,我們需要從暫存區刪除這個文件,并且同時刪除工作區文件。
我們暫存區有多個文件,需要同時清空整個暫存區。
只清除暫存區的某個文件
在git暫存區有多個文件,如果我們只想要從暫存區刪除其中一個文件,那我們可以使用命令:
git rm --cached hello.txt清空暫存區文件并且刪除工作目錄對應文件在git暫存區有多個文件,如果我們只想要從暫存區刪除其中一個文件,并且將這個文件同時從工作目錄刪除,那我們可以使用命令:
git rm -f hello.txt清空暫存區
清空暫存區所有緩存文件,可以刪除版本庫的index文件,就可以達到清空暫存區的目的,可以使用命令:
rm .git/index我簡單的錄制了一個gif圖演示清除緩存區的操作:暫存區文件修改比如我們有一個hello.txt文件,第一次插入了一句話,git add添加到暫存區,然后我們不使用git commit提交,而是選擇繼續更改工作區的hello.txt,這時候就導致暫存區的hello.txt文件和工作區的hello.txt不一致,那這時候選擇git commit提交究竟提交的是暫存區的舊版本還是工作區的新版本呢?我們上一篇其實講過一般情況下使用git commit -m只會提交暫存區的文件,所以說一般情況下就算工作區文件修改了也一樣只會提交暫存區的舊版本,但是為何說一般情況呢?因為我們上篇也提到了git?commit?-a -m命令,使用這個命令如果之前我們已經將hello.txt文件提交到版本庫,代表這個文件已經被Git進行版本管理,這時候使用git commit?-a -m命令則會將工作區做了修改但是沒有添加到暫存區的文件先添加到暫存區再提交,兩步操作合二為一,但是我們一般情況不建議使用這個命令,特別新手更是應該分成兩步操作確保不會出現問題。我也簡單的錄制了一個gif簡單解析下這個過程:可以看到,我先將文件添加到暫存區,然后修改文件新增一句話,再次使用git status命令查看暫存區狀態提示hello.txt文件被修改,這時候我選擇git commit提交,再次查看狀態一樣提示hello.txt文件被修改,所以證明我們工作區所做的修改并沒有被真正提交,提交的一樣是暫存區的舊版本。
撤銷修改
有朋友看到這個標題撤銷修改,會納悶撤銷修改不就是將文件從暫存區刪除,剛才已經提到過了,但是如果我們需要撤銷工作區的修改呢,也就是將hello.txt撤銷修改回退到上一次提交的版本如何做呢?實際上我們git?add后使用git status命令
$ git statusOn branch masterChanges to be committed: (use "git restore --staged ..." to unstage) modified: hello.txtUntracked files: (use "git add ..." to include in what will be committed) project/ scoreInfo.txt可以看到提示我們使用git restore --satged?hello.txt可以從暫存區撤銷這個文件,我們執行完這個命令再次執行git status$ git statusOn branch masterChanges not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: hello.txtUntracked files: (use "git add ..." to include in what will be committed) project/ scoreInfo.txt可以看到再次提示可以使用git restore?hello.txt撤銷工作區的修改回退到上一次提交的版本,再次使用這個命令你個發現我們剛才工作區所做的修改果然全部丟失了。那如果我們想要放棄暫存區的修改并且同時回退工作區文件的修改,執行兩次命令固然沒問題,但是這時候我們可以使用一個命令直接實現:
git checkout -- hello.txt使用這個命令一般有兩種可能,hello.txt文件修改已經添加到暫存區,使用這個命令則會從暫存區刪除hello.txt并且工作區文件版本同時回退。第二種可能文件工作區做了下蓋,還未添加到暫存區,則直接回退工作區版本,所以使用這個命令可以直接將剛才的兩個命令合二為一。版本回退剛才對版本做修改一直都是針對工作區和暫存區,那如果我們工作區版本修改出問題了廢掉了,我們想要將版本回退到版本庫某一個版本如何實現呢?首先我們需要先查看目前提交了幾個版本,這時候可以使用git log查看不同版本的摘要信息:可以看到我們一共提交了三次修改,生成了3個commit_id,我們可以看到每一次提交的備注,然后找到我們需要回退版本的commit_id,取到了commit_id之后我們就可以實現版本回退,使用命令:
git reset --hard HEAD^使用這條命令可以成功將版本回退到上一個版本,比如我們要回退三個版本之前,我們可以使用這個命令你個連續執行三次,但是如果十個百個版本呢?實際上上面的命令完整是:git reset --hard commit_id也就是我們只需要傳對應版本的commit_id就可以實現版本回退到對應的版本,而要查詢舊版本的commit_id剛才說過了使用git log就可以實現。
我們可以看到我是用命令回退到上一個版本,再次git log查看版本log,發現我剛才的版本由于回退丟失了,如果我版本回退后悔了,要如何恢復到剛才的新版本呢?Git還提供了一個記錄所有歷史的命令:git?reflog,我們可以使用git reflog查看所有版本歷史,最后使用git reset指定剛才的commit_id進行恢復。可以看到版本成功恢復到剛才的新版本了,所以使用git log,git?reflog,git reset我們就可以在所有版本來回穿梭,不用擔心回退導致版本丟失的問題。通過本篇文章講到的命令,基本可以滿足工作中對于版本庫管理的一般要求了。下一篇開始將本地倉庫接入遠程倉庫,實現將項目推送到第三方遠程倉庫存儲,比如codding,碼云,GitHub等。歡迎關注公眾號:程序猿周先森。查看更多精彩文章。推薦閱讀git入門篇(1)--初識Gitgit入門篇(2)--Git的安裝git入門篇(3)--更新文件到版本庫
總結
以上是生活随笔為你收集整理的删除隐藏版本信息 版本回退_git之版本穿梭术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载]《STL源码剖析》阅读笔记之 迭
- 下一篇: litepal更新数据失败