Git不暫存提交程式碼也能切換到別的分支(vs code搭配GitLens Git supercharged看效果)

水冗水孚發表於2023-02-24

問題描述

假設有這樣一個場景需求:

  • 某一天,我們正在自己的開發分支上愉快的寫程式碼
  • 突然產品強者找到我們,說客戶要求在生產環境上給首頁加上一個陰影,好看一些
  • 要立刻,馬上加!
  • 但是我們自己的開發分支上程式碼還沒有開發完
  • 我們不想去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-...

相關文章