問(wèn)題描述
假設(shè)有這樣一個(gè)場(chǎng)景需求:
- 某一天,我們正在自己的開(kāi)發(fā)分支上愉快的寫代碼
- 突然
產(chǎn)品強(qiáng)者找到我們,說(shuō)客戶要求在生產(chǎn)環(huán)境上給首頁(yè)加上一個(gè)陰影,好看一些 - 要立刻,馬上加!
- 但是我們自己的開(kāi)發(fā)分支上代碼還沒(méi)有開(kāi)發(fā)完
- 我們不想去
git add ./再git commit -m 'xxx'(不想去增加提交記錄) - 但是我們?nèi)绻苯忧袚Q到生產(chǎn)分支,當(dāng)下還沒(méi)有寫完的代碼就會(huì)被overwritten(容易丟失當(dāng)下還沒(méi)寫完的代碼)
- 此時(shí),
git stash命令就閃亮登場(chǎng)啦...
操作演示步驟
- 我們知道
Git是命令行代碼工具,用于管理我們的開(kāi)發(fā)代碼 - 基于這個(gè)底層工具,一些大佬研發(fā)出一些可視化的
Git管理插件(如在vscode中使用) - 筆者的習(xí)慣是使用命令行
Git操作,搭配GitLens — Git supercharged可視化Git插件 - 下面筆者將在
vscode編輯器中,結(jié)合GitLens — Git supercharged插件去演示場(chǎng)景需求
下載GitLens — Git supercharged插件
筆者也推薦大家使用這個(gè)可視化Git工具,雖然不怎么用這個(gè)可視化工具操作代碼,不過(guò)用于看自己提交的代碼操作,還是比較直觀的。
vscode拓展下載

下載成功

演示操作圖解
假設(shè)有兩個(gè)分支,git branch查看一下

我們當(dāng)下在dev分支愉快地寫代碼呢
// 原來(lái)代碼
console.log('我是開(kāi)發(fā)分支')
console.log('我是開(kāi)發(fā)分支')
console.log('我是開(kāi)發(fā)分支')
// 寫了一半,寫成了
console.log('愉快地寫代碼')
console.log('愉快地寫代碼')
console.log('愉快地寫代碼')

當(dāng)我們想要直接切換分支時(shí),git會(huì)有對(duì)應(yīng)錯(cuò)誤警告,因?yàn)榇a還沒(méi)add還沒(méi)commit呢

error: Your local changes to the following files would be overwritten by checkout:
home.js
Please commit your changes or stash them before you switch branches.
Aborting
/*
錯(cuò)誤:切換分支時(shí)將覆蓋對(duì)以下文件的本地更改:home.js
請(qǐng)?jiān)谇袚Q分支之前提交更改或?qū)⑵潆[藏。
正在中止
*/
大家看到了吧,實(shí)際上Git已經(jīng)對(duì)我們進(jìn)行提示了,不要直接切換分支,否則就給你寫的代碼覆蓋掉。當(dāng)然你可以add commit以后再切換,或者執(zhí)行stash相關(guān)命令將其隱藏。
我們可以執(zhí)行命令git stash save "注釋"將寫了一半的代碼隱藏起來(lái),如下圖:

也可以看STASHES中的詳情

然后可以執(zhí)行git status查看狀態(tài),發(fā)現(xiàn)工作樹(shù)干凈了,可以切換分支了

然后我們git checkout master,進(jìn)行主分支代碼修改,操作完畢以后,再切回dev分支上,再執(zhí)行git stash pop命令,將我們剛剛隱藏在STASHES中的修改代碼再彈出來(lái)即可繼續(xù)愉快地寫代碼啦...,如下圖:

git stash代碼總結(jié)
將未寫完的代碼,隱藏到隱藏區(qū),建議使用第一條,可以加一點(diǎn)注釋,以便于回過(guò)頭來(lái)查看(雖然二者是一個(gè)意思)
-
git stash save "注釋"(保存加注釋隱藏) -
git stash(保存不加注釋隱藏)
將隱藏區(qū)的代碼取出來(lái),恢復(fù)原樣,建議使用第一條,取出即刪除,不會(huì)產(chǎn)生冗余代碼(相當(dāng)于只有一份,丟進(jìn)去,再拿出來(lái));第二條相當(dāng)于復(fù)制一份拿出來(lái)
-
git stash pop(取出并刪除STASHES中的隱藏內(nèi)容) -
git stash apply(取出不刪除STASHES中的隱藏內(nèi)容)
再搭配GitLens Git supercharged插件可視化看效果,可以解決99%的代碼未寫完需要切換分支的需求。實(shí)際上git-stash可以命令也是非常多的,上述文章基本夠用了,不夠用的話我們?cè)偃タ垂俜轿臋n
官方文檔地址: https://git-scm.com/docs/git-...