一、git stash
:臨時保存工作區修改
作用
將當前工作目錄和暫存區的未提交修改保存到棧中,并恢復工作區到上一次提交的干凈狀態。
適用場景:
- 臨時切換分支修復緊急 Bug
- 拉取遠程代碼前清理工作區
- 保存實驗性代碼避免生成無效提交
常用命令:
git stash # 保存修改(默認無描述)
git stash save "修復登錄頁" # 添加描述性消息
git stash -u # 包含未跟蹤文件(新增文件)
git stash -a # 包含所有文件(包括.gitignore忽略的文件)
git stash --patch # 交互式選擇部分修改保存
存儲機制:
- 保存的修改以棧結構存儲(后進先出),可通過
git stash list
查看記錄:stash@{0}: On main: 修復登錄頁 stash@{1}: WIP on dev: 新增搜索功能
二、git stash apply
:恢復保存的修改
作用
將指定 stash
中的修改應用到當前工作目錄,但不刪除 stash 記錄。
適用場景:
- 多次恢復同一份修改(如多分支測試)
- 避免誤刪重要 stash 記錄
常用命令:
git stash apply # 恢復最新保存的修改
git stash apply stash@{1} # 恢復指定 stash(如 stash@{1})
git stash apply --index # 同時恢復暫存區狀態(保留原 git add 狀態)
關鍵特性:
- 不自動刪除 stash:需手動執行
git stash drop
清理 - 可能沖突:若恢復時工作區有修改,需手動解決沖突
三、git stash apply
vs git stash pop
命令 | 恢復修改 | 刪除 stash 記錄 | 適用場景 |
---|---|---|---|
git stash apply | 是 | 否 | 需多次復用同一 stash |
git stash pop | 是 | 是 | 恢復后立即清理棧空間 |
示例工作流:
git stash save "臨時保存登錄頁改動" # 保存修改 → 切換到其他分支修復 Bug git checkout hotfix-branch # 修復完成... git checkout main # 返回原分支 git stash apply # 恢復修改(保留 stash 記錄) git stash drop # 確認無誤后手動刪除
四、注意
未跟蹤文件需特殊處理:
-
默認不保存未跟蹤文件,需添加
-u
或-a
參數。
沖突解決: -
恢復時若沖突,需手動編輯文件 →
git add
→ 繼續操作。
長期存儲風險: -
Stash 是臨時工具,長期未清理的記錄易混淆,建議定期用
git stash list
檢查并清理。 -
git stash
→ 緊急任務前保存工作現場,避免無效提交。 -
git stash apply
→ 非破壞性恢復,適合需重復使用的場景。 -
git stash pop
→ 一次性恢復并清理,簡化操作流程。 -
通過
git stash list
管理記錄,結合--index
或-u
精細化控制,可大幅提升多任務開發效率。