git之reflog命令的使用
寫(xiě)在前面
本文一起看下reflog命令。
1:場(chǎng)景描述
在開(kāi)發(fā)的過(guò)程中,因?yàn)樾薷腻e(cuò)誤,想要通過(guò)git reset命令恢復(fù)到之前的某個(gè)版本,但是選擇提交ID錯(cuò)誤,導(dǎo)致多恢復(fù)了一個(gè)版本,假定,該版本對(duì)應(yīng)的內(nèi)容還沒(méi)有push到遠(yuǎn)端倉(cāng)庫(kù),并且該提交十分重要,可能決定了一個(gè)將要倒閉的公司是否能夠繼續(xù) 茍延殘喘
,怎么辦?肯定要恢復(fù)回來(lái),git reflog就可以幫你輕松搞定。本文從純命令操作方式和sourcetree界面操作方式來(lái)進(jìn)行模擬。
2:純命令操作
2.1:初始化git倉(cāng)庫(kù)
$ pwd /d/test/testreflog JHP+Administrator@jhp MINGW64 /d/test/testreflog $ git init Initialized empty Git repository in D:/test/testreflog/.git/
2.2:執(zhí)行3次提交
添加a.txt并提交
$ touch a.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ echo "a" > a.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ git add a.txt warning: LF will be replaced by CRLF in a.txt. The file will have its original line endings in your working directory JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ git commit -m'add a.txt' [master (root-commit) 0c70790] add a.txt 1 file changed, 1 insertion(+) create mode 100644 a.txt
添加b.txt并提交
$ touch b.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ echo 'b' > b.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ git add b.txt warning: LF will be replaced by CRLF in b.txt. The file will have its original line endings in your working directory JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ git commit -m'add b.txt' [master b68fdbe] add b.txt 1 file changed, 1 insertion(+) create mode 100644 b.txt
添加c.txt并提交
$ touch c.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ echo 'c' > c.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ git add c.txt warning: LF will be replaced by CRLF in c.txt. The file will have its original line endings in your working directory JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ git commit -m'add c.txt' [master 1b263f8] add c.txt 1 file changed, 1 insertion(+) create mode 100644 c.txt
查看提交日志
$ git log -9 --pretty=oneline 1b263f8227fbb8050cee5bde301c11fa6a4d3467 (HEAD -> master) add c.txt b68fdbe04611a68e16f538f1efb63727c1fc5e64 add b.txt 0c70790e7d7b54a582c81defe27a49b47df1e6db add a.txt
模擬錯(cuò)誤操作
假定 add c.txt
是我們誤操作,因此我們需要執(zhí)行命令 git reset --hard b68fdbe046
來(lái)恢復(fù)到其之前的一個(gè)版本,但是操作失誤,一直還原到了 add a.txt
對(duì)應(yīng)的提交,如下:
$ git reset --hard 0c70790e7d7b HEAD is now at 0c70790 add a.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ git log -n9 --pretty=oneline 0c70790e7d7b54a582c81defe27a49b47df1e6db (HEAD -> master) add a.txt
在準(zhǔn)備工作中,當(dāng)我們執(zhí)行 git reset --hard
后,被恢復(fù)代碼之后的提交通過(guò)git log就看不到了,但是git reflog其實(shí)是可以看到的,因?yàn)樵撁羁吹降氖沁M(jìn)行過(guò)的所有的操作,對(duì)比如下圖:
如下:
$ git reflog -n9 --pretty=oneline 0c70790 (HEAD -> master) HEAD@{0}: reset: moving to 0c70790e7d7b 1b263f8 HEAD@{1}: reset: moving to HEAD 1b263f8 HEAD@{2}: commit: add c.txt b68fdbe HEAD@{3}: commit: add b.txt 0c70790 (HEAD -> master) HEAD@{4}: commit (initial): add a.txt
注意這里的 HEAD@{n}
表示head指針在n次移動(dòng)之前的情況,比如我們要恢復(fù)到 add b.txt
的提交,只需要執(zhí)行如下操作即可:
$ git reset --hard HEAD@{3} HEAD is now at b68fdbe add b.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ git log -n3 --pretty=oneline b68fdbe04611a68e16f538f1efb63727c1fc5e64 (HEAD -> master) add b.txt 0c70790e7d7b54a582c81defe27a49b47df1e6db add a.txt
3:sourcetree界面操作
3.1:初始化git倉(cāng)庫(kù)
git init
。
3.2:使用sourcetree打開(kāi)倉(cāng)庫(kù)
然后選擇倉(cāng)庫(kù)的文件夾即可。
此時(shí)因?yàn)槲覀兪裁匆矝](méi)有做,所以信息都是空的。
3.3:創(chuàng)建文件a.txt并提交
$ touch a.txt JHP+Administrator@jhp MINGW64 /d/test/testreflog (master) $ echo "a" > a.txt
暫存并提交:
接著同樣的方式,添加b.txt,c.txt,最終如下圖:
3.4:模擬錯(cuò)誤操作
假定 add c.txt
是我們誤操作,因此我們需要恢復(fù)到其之前的一個(gè)版本,但是操作失誤,一直還原到了add a.txt
對(duì)應(yīng)的提交,如下:
3.5:恢復(fù)操作
同命令行方式。這里sourcetree沒(méi)有提交對(duì)應(yīng)的UI操作。
寫(xiě)在后面
參考文章列表
【學(xué)了就忘】Git操作 — 51.git reflog命令 。
git救急之reflog恢復(fù)錯(cuò)誤的提交 。
到此這篇關(guān)于git之reflog命令的使用的文章就介紹到這了,更多相關(guān)git reflog命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
適合后臺(tái)管理系統(tǒng)開(kāi)發(fā)的12個(gè)前端框架(小結(jié))
當(dāng)你寫(xiě)項(xiàng)目的時(shí)候,如何快速的完成一個(gè)項(xiàng)目的搭建,這個(gè)時(shí)候就需要借助到一些模板了,前端開(kāi)發(fā)的一個(gè)好處就是,各類(lèi)UI模板都是相當(dāng)?shù)凝R全的,本文就介紹幾個(gè)前端框架,感興趣的可以了解一下2021-06-06聯(lián)邦學(xué)習(xí)論文解讀分散數(shù)據(jù)的深層網(wǎng)絡(luò)通信
這篇文章主要為大家介紹了論文解讀分散數(shù)據(jù)的深層網(wǎng)絡(luò)通信有效學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Ollama整合open-webui的步驟及訪(fǎng)問(wèn)
這篇文章主要介紹了如何通過(guò)源碼方式安裝OpenWebUI,并詳細(xì)說(shuō)明了安裝步驟、環(huán)境要求以及第一次使用時(shí)的賬號(hào)注冊(cè)和模型選擇過(guò)程,需要的朋友可以參考下2025-02-02合成大西瓜開(kāi)發(fā)源碼手把手教你運(yùn)行和部署大西瓜游戲項(xiàng)目(附源碼)
這篇文章主要介紹了合成大西瓜開(kāi)發(fā)源碼手把手教你運(yùn)行和部署大西瓜游戲項(xiàng)目(附源碼),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02深入理解TCP協(xié)議與UDP協(xié)議的原理及區(qū)別
網(wǎng)絡(luò)編程有三個(gè)要素,分別是IP地址、端口號(hào)和通信協(xié)議,那本文主要講述的是TCP與UDP這兩種通信協(xié)議,以及編程的實(shí)現(xiàn),感興趣的可以了解一下2021-06-06