爲什麼需要Git stash?¶
想象一下,你正在寫一個功能,代碼改了一半,突然接到一個緊急修復的任務,需要切換到bug分支。但此時你還沒提交修改的代碼,如果直接切換分支,這些修改會被覆蓋或導致衝突。這時候,Git stash 就派上用場了!它能幫你把“當前正在做但不想提交”的代碼“臨時存起來”,等處理完急事再回來繼續。
Git stash是什麼?¶
Git stash 是Git提供的一個“臨時存儲”工具,專門用來保存工作區和暫存區的修改(但不保存分支信息)。保存後,你的工作區會恢復到和上次提交時一模一樣的狀態,這樣你就能幹淨地切換分支、拉取代碼或做其他操作,之後再通過stash恢復之前的修改。
常用的Git stash命令¶
1. 保存當前修改(最常用)¶
命令:git stash
作用:把工作區和暫存區的所有修改“打包”存起來,默認會帶上一個自動生成的描述(如 WIP on 分支名: 提交哈希 簡短描述)。
示例:
# 當前在dev分支,工作區有未提交的修改
$ git status # 查看狀態,顯示修改未提交
$ git stash # 執行stash,保存修改
Saved working directory and index state WIP on dev: a1b2c3d 修改登錄頁面
2. 查看所有stash記錄¶
命令:git stash list
作用:列出所有之前保存的stash(按時間倒序),每條記錄包含一個編號(如 stash@{0})和描述。
示例:
$ git stash list
stash@{0}: WIP on dev: a1b2c3d 修改登錄頁面
stash@{1}: WIP on dev: 4e5f6g7 新增用戶列表
3. 恢復stash(不刪除)¶
命令:git stash apply [stash編號]
作用:恢復指定的stash記錄(默認恢復最近的 stash@{0}),但不會刪除該記錄。
示例:
# 恢復最近的stash(stash@{0})
$ git stash apply
On branch dev
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: a.txt
4. 恢復stash(刪除)¶
命令:git stash pop [stash編號]
作用:恢復指定的stash,並且刪除該記錄(推薦,因爲stash是臨時的)。
示例:
# 恢復stash@{0}並刪除
$ git stash pop
On branch dev
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: a.txt
Dropped refs/stash@{0} (f123456...)
5. 刪除指定stash¶
命令:git stash drop [stash編號]
作用:只刪除指定的stash記錄(如果想保留恢復,用apply;想刪除,用drop)。
示例:
# 刪除stash@{1}
$ git stash drop stash@{1}
Dropped stash@{1} (f234567...)
6. 清空所有stash¶
命令:git stash clear
作用:刪除所有stash記錄,謹慎使用!
示例:
$ git stash clear
All stashes removed.
實用場景示例¶
場景:臨時切換分支修復bug¶
- 當前工作區有未提交修改:
$ git status # 顯示修改的文件,如a.txt
$ git stash # 保存修改
Saved working directory and index state WIP on dev: a1b2c3d 開發中
- 切換到bug分支修復問題:
$ git checkout bugfix # 切換分支(此時工作區乾淨)
$ git commit -m "修復登錄bug" # 提交修復
- 修復完成後,恢復之前的stash:
$ git checkout dev # 切回dev分支
$ git stash pop # 恢復並刪除stash記錄
On branch dev
Changes to be committed:
modified: a.txt
注意事項¶
- stash是臨時的:stash僅用於臨時保存,不要把重要內容長期放在stash裏。
- 恢復可能有衝突:如果恢復時和其他修改衝突,Git會提示“Automatic merge failed”,需手動編輯文件解決衝突。
- 恢復後狀態:
pop和apply都會恢復修改到工作區,但pop會刪除stash,apply保留。 - stash不保存分支:stash只是保存修改快照,不是分支,無法像分支一樣切換。
總結¶
Git stash 是處理“臨時未完成工作”的神器,能幫你在切換分支、拉取代碼時避免衝突,保持工作區乾淨。掌握 git stash、git stash apply、git stash pop 這三個核心命令,就能輕鬆應對大部分臨時修改場景。記住:stash用完即刪,別讓它堆積!