git 進(jìn)階。stash和reflog使用片拍,可恢復(fù)誤刪除煌集、reset

stash: 儲藏。

儲藏機(jī)制典型情況---“中斷工作流”穆碎。
使用場景:
1牙勘、在當(dāng)前開發(fā)做修改后,不需要進(jìn)行commit(可能是未開發(fā)完所禀,有優(yōu)先級更高的任務(wù)或bug)方面,這時本地修改的代碼就可以使用stash儲藏。(也這種情況也可以使用基于當(dāng)前修改新建分支解決)色徘。
2恭金、多個分支開發(fā)時,需要臨時切換至其他分支褂策,但是當(dāng)前開發(fā)分支不做commit横腿,可以使用stash儲藏。

常用命令:
1斤寂、git stash save "描述" :保存當(dāng)前修改至stash
save是git stash的默認(rèn)語句耿焊,輸入git stash也是默認(rèn)執(zhí)行g(shù)it stash save。
2遍搞、git stash pop:取出最新的stash內(nèi)容罗侯。
3、git stash list:查看所有stash列表
列表的形式是這樣的:

stash@{0}: WIP on master: 65f0fe3 test commit

有多個stash 就會有多條溪猿。其中stash@{0}是用來取某一條stash的標(biāo)識
4钩杰、git stash apply stash@{0}:取出某條stash中的內(nèi)容
5纫塌、git stash show -p stash@{0}:查看某個stash中詳細(xì)的修改信息

reflog引用日志

使用場景:在誤刪或者進(jìn)行reset的誤操作后,需要將代碼恢復(fù)讲弄〈胱螅可根據(jù)引用日志操作恢復(fù)。
引用日志會記錄以下情況:

  • 復(fù)制
  • 推送
  • 執(zhí)行新提交
  • 修改或創(chuàng)建分支
  • 重置操作
    一些更復(fù)雜的操作避除,比如 git filter-branch 都可以歸結(jié)到簡單的提交上怎披,也會記錄下來。根本上來說瓶摆,任何修改引用或者更改分支頭的git操作都會記錄钳枕。

常用命令:
1、git reflog show :顯示引用日志赏壹。
引用日志是這樣的:

5b488e0 HEAD@{5}: commit: test 3
2dd0082 HEAD@{6}: checkout: moving from test to master
65ca119 HEAD@{7}: checkout: moving from master to test
2dd0082 HEAD@{8}: reset: moving to HEAD

HEAD@{0} 條目從0開始鱼炒,我上面截取的是中間的一部分引用日志。
HEAD@{0}條目可作為log查看和reset的標(biāo)識蝌借∥羟疲可以針對某一 HEAD@{0} 條目進(jìn)行 git log HEAD@{0} 或 git reset HEAD@{0} 操作。
2菩佑、git reflog 分支名:顯示某個分支的引用日志
3自晰、git log HEAD@{0}:查看此條目和此條目之前的提交日志。
4稍坯、git reset HEAD@{0}:針對某一條目進(jìn)行reset 命令酬荞,reset 后可接不同的命令達(dá)到不通的效果,比如--soft --mixed --hard瞧哟,具體可查看之前文章對reset的使用混巧。當(dāng)誤刪或者進(jìn)行reset的誤操作后,可用此方法恢復(fù)勤揩。

模擬場景:
假如我們在執(zhí)行 “git reset --hard 某次提交標(biāo)識” 后(執(zhí)行reset --hard會將本地的修改直接重置)咧党,發(fā)現(xiàn)將不需要重置的代碼也重置了,再使用git log 查看提交日志時陨亡,發(fā)現(xiàn)之前的提交日志已經(jīng)沒了傍衡,回到了reset 的那次提交。這時就可以使用reflog 引用日志進(jìn)行恢復(fù)负蠕。

具體的操作方法:
用以下引用日志說明

1蛙埂、我先進(jìn)行了三次測試的提交。提交完后使用 git reflog show 查看引用日志遮糖。
952108e (HEAD -> master) HEAD@{0}: commit: test Commit 03
5d0dd2d HEAD@{1}: commit: test commit 02
d5e842c HEAD@{2}: commit: test commit

使用 git log 查看日志

commit 952108e52816f07002b102e6b49b1de4bd922c68 (HEAD -> master)
Author: weiweilong <weiweilonggl@gmail.com>
Date:   Fri Dec 6 14:38:21 2019 +0800

    test Commit 03
    
    test Commit 03

commit 5d0dd2de10abfea78679763d0a8aac755eafa7b4
Author: weiweilong <weiweilonggl@gmail.com>
Date:   Fri Dec 6 14:37:23 2019 +0800

    test commit 02
    
    test commit 02

commit d5e842cb35285a7e27a1d08c2388b46c13cf54ff
Author: weiweilong <weiweilonggl@gmail.com>
Date:   Fri Dec 6 14:35:24 2019 +0800

    test commit
    
    test commit

在git log 和git reflog show 中都有提交日志绣的。

2、使用命令 git reset --hard d5e842cb35285a7e27a1d08c2388b46c13cf54ff 重置到“test commit”這次提交。對應(yīng)命令行命令:
?  ztyf_min git:(master) git reflog show
?  ztyf_min git:(master) git log
?  ztyf_min git:(master) git reset --hard d5e842cb35285a7e27a1d08c2388b46c13cf54ff
HEAD is now at d5e842c test commit
?  ztyf_min git:(master) 

再使用git reflog show 和 git log查看日志

d5e842c (HEAD -> master) HEAD@{0}: reset: moving to d5e842cb35285a7e27a1d08c2388b46c13cf54ff
952108e HEAD@{1}: commit: test Commit 03
5d0dd2d HEAD@{2}: commit: test commit 02
d5e842c (HEAD -> master) HEAD@{3}: commit: test commit

git log

commit d5e842cb35285a7e27a1d08c2388b46c13cf54ff (HEAD -> master)
Author: weiweilong <weiweilonggl@gmail.com>
Date:   Fri Dec 6 14:35:24 2019 +0800

    test commit
    
    test commit

可以看到log中只有“test commit”的提交記錄了被辑,但是reflog中所有的操作都被記錄了。假如需要恢復(fù)到這次reset前的內(nèi)容敬惦,執(zhí)行git reset HEAD@{1}即可

3盼理、執(zhí)行:git reset HEAD@{1}

執(zhí)行完再使用git reflog show 和 git log查看日志

952108e (HEAD -> master) HEAD@{0}: reset: moving to HEAD@{1}
d5e842c HEAD@{1}: reset: moving to d5e842cb35285a7e27a1d08c2388b46c13cf54ff
952108e (HEAD -> master) HEAD@{2}: commit: test Commit 03
5d0dd2d HEAD@{3}: commit: test commit 02
d5e842c HEAD@{4}: commit: test commit

git log

commit 952108e52816f07002b102e6b49b1de4bd922c68 (HEAD -> master)
Author: weiweilong <weiweilonggl@gmail.com>
Date:   Fri Dec 6 14:38:21 2019 +0800

    test Commit 03
    
    test Commit 03

commit 5d0dd2de10abfea78679763d0a8aac755eafa7b4
Author: weiweilong <weiweilonggl@gmail.com>
Date:   Fri Dec 6 14:37:23 2019 +0800

    test commit 02
    
    test commit 02

commit d5e842cb35285a7e27a1d08c2388b46c13cf54ff
Author: weiweilong <weiweilonggl@gmail.com>
Date:   Fri Dec 6 14:35:24 2019 +0800

    test commit
    
    test commit

到此可以看到原來reset的log已經(jīng)回來了。但是對應(yīng)本地的文件還并沒有修改回來俄删。
使用git status查看狀態(tài)宏怔。

?  ztyf_min git:(master) ? git status
On branch master
Your branch is ahead of 'origin/master' by 7 commits.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   pages/Home/MyCar/MyCar.js

no changes added to commit (use "git add" and/or "git commit -a")

可以看到pages/Home/MyCar/MyCar.js 文件就是我們需要恢復(fù)的文件,對文件進(jìn)行checkout 就可以把文件修改恢復(fù)到提交前的狀態(tài)了畴椰。
一般在項目中使用時都是借用工具進(jìn)行discard changes臊诊。

其實恢復(fù)文件git提供了一個git fsck命令,fsck(file system check)文件系統(tǒng)檢測斜脂。但是一般情況用不到抓艳,只有在誤刪除并且把引用日志也刪除的情況才用到git fsck。本文就不做解釋了帚戳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玷或,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子片任,更是在濱河造成了極大的恐慌偏友,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件对供,死亡現(xiàn)場離奇詭異位他,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)产场,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鹅髓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人京景,你說我怎么就攤上這事迈勋。” “怎么了醋粟?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵靡菇,是天一觀的道長。 經(jīng)常有香客問我米愿,道長厦凤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任育苟,我火速辦了婚禮较鼓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己博烂,他們只是感情好香椎,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著禽篱,像睡著了一般畜伐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躺率,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天玛界,我揣著相機(jī)與錄音,去河邊找鬼悼吱。 笑死慎框,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的后添。 我是一名探鬼主播笨枯,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遇西!你這毒婦竟也來了猎醇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤努溃,失蹤者是張志新(化名)和其女友劉穎硫嘶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梧税,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡沦疾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了第队。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哮塞。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凳谦,靈堂內(nèi)的尸體忽然破棺而出忆畅,到底是詐尸還是另有隱情,我是刑警寧澤尸执,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布家凯,位于F島的核電站,受9級特大地震影響如失,放射性物質(zhì)發(fā)生泄漏绊诲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一褪贵、第九天 我趴在偏房一處隱蔽的房頂上張望掂之。 院中可真熱鬧抗俄,春花似錦、人聲如沸世舰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跟压。三九已至胰蝠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裆馒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工丐怯, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留喷好,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓读跷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拙绊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 以下筆記主要參考gitgot刹孔,大致了解git使用和原理。 第一部分我們從個人的視角去研究如何用好Git丐枉,并且揭示G...
    carolwhite閱讀 2,383評論 0 1
  • 查看哆键、添加、提交瘦锹、刪除籍嘹、找回,重置修改文件 git help # 顯示command的help git sho...
    Swiftor閱讀 2,116評論 0 2
  • 簡介 Git是一個開源的分布式版本控制系統(tǒng)弯院,用于敏捷高效地處理任何或小或大的項目辱士。 Git 與常用的版本控制工具 ...
    閩越布衣閱讀 2,745評論 0 18
  • git 使用筆記 git原理: 文件(blob)對象,樹(tree)對象听绳,提交(commit)對象 tree對象 ...
    神刀閱讀 3,773評論 0 10
  • 1. GIT命令 git init在本地新建一個repo颂碘,進(jìn)入一個項目目錄,執(zhí)行g(shù)it init椅挣,會初始化一個re...
    江邊一蓑煙閱讀 800評論 0 0