---
# System prepended metadata

title: Git Stash 教學

---

# Git Stash 教學

### 什麼是 Git Stash ?
&nbsp;&nbsp;用於將目前未完成的修改暫時儲存起來，並將工作區還原到乾淨的狀態。

&nbsp;&nbsp;讓工程師在不提交（commit）未完成的工作的情況下，能夠切換分支、處理緊急任務或嘗試其他工作，完成後可以將暫存的變更取回並套用回去。

### Stash 使用情境
&nbsp;&nbsp;某一天主管突然請小明看一下急件，系統出了BUG必須先修復，但是小明手上目前正在開發新功能，因此小明就可以使用 Git Stash 來暫存目前手上正在開發的功能分支。

### Commit VS Stash 比較表

| 比較項目             | Git Commit                                  | Git Stash                                         |
|----------------------|----------------------------------------------|--------------------------------------------------|
| **目的**             | 將變更永久記錄到版本紀錄中                     | 暫時儲存未完成的變更，不進入正式版本紀錄               |
| **是否加入版本控制紀錄** | ✅ 是，會加入 commit log                    | ❌ 否，不會出現在版本紀錄                            |
| **是否需要訊息說明**   | ✅ 通常需要輸入 commit message              | ❌ 預設不需輸入，但可加註說明                         |
| **適用情境**         | 功能完成，準備納入正式版本控制                 | 功能尚未完成，但需切換分支或處理緊急任務               |
| **是否可切換分支**     | ✅ 可以，建議先 commit 再切分支                | ✅ 可以，stash 後變更會被清除，安全切換               |
| **還原方式**         | `git revert` 或 `git reset`                 | `git stash pop` 或 `git stash apply`             |
| **是否支援多筆記錄**   | ✅ 是，透過多次 commit                       | ✅ 是，stash 可堆疊多筆記錄                            |
| **是否會影響遠端**     | ✅ 會，push 後遠端也會有這筆 commit            | ❌ 不會，stash 僅存在本地端                            |
| **典型用途**         | 保存功能完成的階段成果                         | 暫存尚未完成的變更，處理緊急或短暫需求                 |

### Commit 範例
``` Git=
# 檢查目前的修改狀態
git status

# 將檔案加入暫存區（Stage）
git add .

# 建立一個新的提交（Commit）
git commit -m "新增查詢單筆會員資料功能"
```
### Stash 範例
``` Git=
# 將目前尚未提交的變更暫存起來
git stash

# 查看目前的 stash 清單
git stash list

# 套用最近的一筆 stash 並移除
git stash pop

# 若要套用指定的一筆 stash（例如 stash@{1}），會刪除 stash 紀錄
git stash pop stash@{1}

# 只套用但保留 stash 紀錄
git stash apply

# 若要套用指定的一筆 stash（例如 stash@{1}），不會刪除 stash 紀錄
git stash apply stash@{1}

# 移除指定的一筆 stash （例如 stash@{0}）
git stash drop stash@{0}
```