問題描述
假設有這樣一個場景需求:
- 某一天,我們正在自己的開發分支上愉快的寫程式碼
- 突然
產品強者
找到我們,說客戶要求在生產環境上給首頁加上一個陰影,好看一些 - 要立刻,馬上加!
- 但是我們自己的開發分支上程式碼還沒有開發完
- 我們不想去
git add ./
再git commit -m 'xxx'
(不想去增加提交記錄) - 但是我們如果直接切換到生產分支,當下還沒有寫完的程式碼就會被overwritten(容易丟失當下還沒寫完的程式碼)
- 此時,
git stash
命令就閃亮登場啦...
操作演示步驟
- 我們知道
Git
是命令列程式碼工具,用於管理我們的開發程式碼 - 基於這個底層工具,一些大佬研發出一些視覺化的
Git管理外掛
(如在vscode
中使用) - 筆者的習慣是使用命令列
Git
操作,搭配GitLens — Git supercharged
視覺化Git
外掛 - 下面筆者將在
vscode
編輯器中,結合GitLens — Git supercharged
外掛去演示場景需求
下載GitLens — Git supercharged外掛
筆者也推薦大家使用這個視覺化Git
工具,雖然不怎麼用這個視覺化工具操作程式碼,不過用於看自己提交的程式碼操作,還是比較直觀的。
vscode擴充下載
下載成功
演示操作圖解
假設有兩個分支,git branch
檢視一下
我們當下在dev
分支愉快地寫程式碼呢
// 原來程式碼
console.log('我是開發分支')
console.log('我是開發分支')
console.log('我是開發分支')
// 寫了一半,寫成了
console.log('愉快地寫程式碼')
console.log('愉快地寫程式碼')
console.log('愉快地寫程式碼')
當我們想要直接切換分支時,git
會有對應錯誤警告,因為程式碼還沒add
還沒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
/*
錯誤:切換分支時將覆蓋對以下檔案的本地更改:home.js
請在切換分支之前提交更改或將其隱藏。
正在中止
*/
大家看到了吧,實際上Git
已經對我們進行提示了,不要直接切換分支,否則就給你寫的程式碼覆蓋掉。當然你可以add commit
以後再切換,或者執行stash
相關命令將其隱藏。
我們可以執行命令git stash save "註釋"
將寫了一半的程式碼隱藏起來,如下圖:
也可以看STASHES
中的詳情
然後可以執行git status
檢視狀態,發現工作樹幹淨了,可以切換分支了
然後我們git checkout master
,進行主分支程式碼修改,操作完畢以後,再切回dev分支
上,再執行git stash pop
命令,將我們剛剛隱藏在STASHES
中的修改程式碼再彈出來
即可繼續愉快地寫程式碼啦...,如下圖:
git stash程式碼總結
將未寫完的程式碼,隱藏到隱藏區,建議使用第一條,可以加一點註釋,以便於回過頭來檢視(雖然二者是一個意思)
git stash save "註釋"
(儲存加註釋隱藏)git stash
(儲存不加註釋隱藏)
將隱藏區的程式碼取出來,恢復原樣,建議使用第一條,取出即刪除,不會產生冗餘程式碼(相當於只有一份,丟進去,再拿出來);第二條相當於複製一份拿出來
git stash pop
(取出並刪除STASHES
中的隱藏內容)git stash apply
(取出不刪除STASHES
中的隱藏內容)
再搭配GitLens Git supercharged
外掛視覺化看效果,可以解決99%的程式碼未寫完需要切換分支的需求。實際上git-stash
可以命令也是非常多的,上述文章基本夠用了,不夠用的話我們再去看官方文件
官方文件地址: https://git-scm.com/docs/git-...