删除隐藏版本信息 版本回退_git之版本穿梭术
暫存區(qū)文件刪除
我們都清楚,我們要更新版本庫(kù)首先git add一個(gè)文件,這時(shí)候這個(gè)文件所做的修改就會(huì)添加到暫存區(qū),但是這時(shí)候如果我們發(fā)現(xiàn)添加錯(cuò)文件了,我們?nèi)绾蝿h除暫存區(qū)的文件呢?這里一般來(lái)說(shuō)有三種情況存在:暫存區(qū)存在一個(gè)文件hello.txt,我們需要從暫存區(qū)刪除這個(gè)文件,但是工作區(qū)文件不能刪除。
暫存區(qū)存在一個(gè)文件hello.txt,我們需要從暫存區(qū)刪除這個(gè)文件,并且同時(shí)刪除工作區(qū)文件。
我們暫存區(qū)有多個(gè)文件,需要同時(shí)清空整個(gè)暫存區(qū)。
只清除暫存區(qū)的某個(gè)文件
在git暫存區(qū)有多個(gè)文件,如果我們只想要從暫存區(qū)刪除其中一個(gè)文件,那我們可以使用命令:
git rm --cached hello.txt清空暫存區(qū)文件并且刪除工作目錄對(duì)應(yīng)文件在git暫存區(qū)有多個(gè)文件,如果我們只想要從暫存區(qū)刪除其中一個(gè)文件,并且將這個(gè)文件同時(shí)從工作目錄刪除,那我們可以使用命令:
git rm -f hello.txt清空暫存區(qū)
清空暫存區(qū)所有緩存文件,可以刪除版本庫(kù)的index文件,就可以達(dá)到清空暫存區(qū)的目的,可以使用命令:
rm .git/index我簡(jiǎn)單的錄制了一個(gè)gif圖演示清除緩存區(qū)的操作:暫存區(qū)文件修改比如我們有一個(gè)hello.txt文件,第一次插入了一句話,git add添加到暫存區(qū),然后我們不使用git commit提交,而是選擇繼續(xù)更改工作區(qū)的hello.txt,這時(shí)候就導(dǎo)致暫存區(qū)的hello.txt文件和工作區(qū)的hello.txt不一致,那這時(shí)候選擇git commit提交究竟提交的是暫存區(qū)的舊版本還是工作區(qū)的新版本呢?我們上一篇其實(shí)講過(guò)一般情況下使用git commit -m只會(huì)提交暫存區(qū)的文件,所以說(shuō)一般情況下就算工作區(qū)文件修改了也一樣只會(huì)提交暫存區(qū)的舊版本,但是為何說(shuō)一般情況呢?因?yàn)槲覀兩掀蔡岬搅薵it?commit?-a -m命令,使用這個(gè)命令如果之前我們已經(jīng)將hello.txt文件提交到版本庫(kù),代表這個(gè)文件已經(jīng)被Git進(jìn)行版本管理,這時(shí)候使用git commit?-a -m命令則會(huì)將工作區(qū)做了修改但是沒(méi)有添加到暫存區(qū)的文件先添加到暫存區(qū)再提交,兩步操作合二為一,但是我們一般情況不建議使用這個(gè)命令,特別新手更是應(yīng)該分成兩步操作確保不會(huì)出現(xiàn)問(wèn)題。我也簡(jiǎn)單的錄制了一個(gè)gif簡(jiǎn)單解析下這個(gè)過(guò)程:可以看到,我先將文件添加到暫存區(qū),然后修改文件新增一句話,再次使用git status命令查看暫存區(qū)狀態(tài)提示hello.txt文件被修改,這時(shí)候我選擇git commit提交,再次查看狀態(tài)一樣提示hello.txt文件被修改,所以證明我們工作區(qū)所做的修改并沒(méi)有被真正提交,提交的一樣是暫存區(qū)的舊版本。
撤銷(xiāo)修改
有朋友看到這個(gè)標(biāo)題撤銷(xiāo)修改,會(huì)納悶撤銷(xiāo)修改不就是將文件從暫存區(qū)刪除,剛才已經(jīng)提到過(guò)了,但是如果我們需要撤銷(xiāo)工作區(qū)的修改呢,也就是將hello.txt撤銷(xiāo)修改回退到上一次提交的版本如何做呢?實(shí)際上我們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可以從暫存區(qū)撤銷(xiāo)這個(gè)文件,我們執(zhí)行完這個(gè)命令再次執(zhí)行g(shù)it 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撤銷(xiāo)工作區(qū)的修改回退到上一次提交的版本,再次使用這個(gè)命令你個(gè)發(fā)現(xiàn)我們剛才工作區(qū)所做的修改果然全部丟失了。那如果我們想要放棄暫存區(qū)的修改并且同時(shí)回退工作區(qū)文件的修改,執(zhí)行兩次命令固然沒(méi)問(wèn)題,但是這時(shí)候我們可以使用一個(gè)命令直接實(shí)現(xiàn):
git checkout -- hello.txt使用這個(gè)命令一般有兩種可能,hello.txt文件修改已經(jīng)添加到暫存區(qū),使用這個(gè)命令則會(huì)從暫存區(qū)刪除hello.txt并且工作區(qū)文件版本同時(shí)回退。第二種可能文件工作區(qū)做了下蓋,還未添加到暫存區(qū),則直接回退工作區(qū)版本,所以使用這個(gè)命令可以直接將剛才的兩個(gè)命令合二為一。版本回退剛才對(duì)版本做修改一直都是針對(duì)工作區(qū)和暫存區(qū),那如果我們工作區(qū)版本修改出問(wèn)題了廢掉了,我們想要將版本回退到版本庫(kù)某一個(gè)版本如何實(shí)現(xiàn)呢?首先我們需要先查看目前提交了幾個(gè)版本,這時(shí)候可以使用git log查看不同版本的摘要信息:可以看到我們一共提交了三次修改,生成了3個(gè)commit_id,我們可以看到每一次提交的備注,然后找到我們需要回退版本的commit_id,取到了commit_id之后我們就可以實(shí)現(xiàn)版本回退,使用命令:
git reset --hard HEAD^使用這條命令可以成功將版本回退到上一個(gè)版本,比如我們要回退三個(gè)版本之前,我們可以使用這個(gè)命令你個(gè)連續(xù)執(zhí)行三次,但是如果十個(gè)百個(gè)版本呢?實(shí)際上上面的命令完整是:git reset --hard commit_id也就是我們只需要傳對(duì)應(yīng)版本的commit_id就可以實(shí)現(xiàn)版本回退到對(duì)應(yīng)的版本,而要查詢舊版本的commit_id剛才說(shuō)過(guò)了使用git log就可以實(shí)現(xiàn)。
我們可以看到我是用命令回退到上一個(gè)版本,再次git log查看版本log,發(fā)現(xiàn)我剛才的版本由于回退丟失了,如果我版本回退后悔了,要如何恢復(fù)到剛才的新版本呢?Git還提供了一個(gè)記錄所有歷史的命令:git?reflog,我們可以使用git reflog查看所有版本歷史,最后使用git reset指定剛才的commit_id進(jìn)行恢復(fù)。可以看到版本成功恢復(fù)到剛才的新版本了,所以使用git log,git?reflog,git reset我們就可以在所有版本來(lái)回穿梭,不用擔(dān)心回退導(dǎo)致版本丟失的問(wèn)題。通過(guò)本篇文章講到的命令,基本可以滿足工作中對(duì)于版本庫(kù)管理的一般要求了。下一篇開(kāi)始將本地倉(cāng)庫(kù)接入遠(yuǎn)程倉(cāng)庫(kù),實(shí)現(xiàn)將項(xiàng)目推送到第三方遠(yuǎn)程倉(cāng)庫(kù)存儲(chǔ),比如codding,碼云,GitHub等。歡迎關(guān)注公眾號(hào):程序猿周先森。查看更多精彩文章。推薦閱讀git入門(mén)篇(1)--初識(shí)Gitgit入門(mén)篇(2)--Git的安裝git入門(mén)篇(3)--更新文件到版本庫(kù)
總結(jié)
以上是生活随笔為你收集整理的删除隐藏版本信息 版本回退_git之版本穿梭术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [转载]《STL源码剖析》阅读笔记之 迭
- 下一篇: litepal更新数据失败