在使用Git管理代碼時,你是否遇到過這樣的情況:正在專注寫一個新功能,突然需要修復一個緊急的線上bug,此時如果直接提交半成品代碼,會影響後續開發思路;但不提交的話,又無法切換到bug修復的分支。這時,Git stash就派上用場了!它能幫你臨時保存當前的工作進度,讓你可以安心處理其他任務,之後再回來繼續你的工作。

爲什麼需要Git stash?

想象一下這幾個場景,你就會明白stash的必要性:

  • 場景1:緊急切換分支
    你正在dev分支開發一個新功能,寫了一半代碼,突然發現main分支有個緊急bug需要修復。此時執行git checkout main會被Git拒絕(因爲有未提交的修改),這時候用stash就能先“凍結”當前進度,切換分支修復完bug後再回來。

  • 場景2:臨時保存進度
    你正在調試一個複雜的功能,寫了一半代碼,臨時需要去處理另一個簡單的需求(比如改個文檔)。此時用stash保存當前代碼,處理完簡單需求後再恢復,不用重複寫代碼。

Git stash的基本操作

1. 保存當前修改

當你有未提交的修改(包括工作區和暫存區),可以用git stash save命令將其臨時保存。
語法git stash save "消息"(消息可選,建議加簡短說明,方便後續識別)。

示例

# 假設你正在修復用戶登錄頁面的bug,寫了一半代碼,此時執行:
git stash save "臨時保存用戶登錄頁面的bug修復進度"

執行後,Git會將當前的修改“打包”保存,並回到最近一次提交的狀態。此時git status會顯示“乾淨”(無未提交修改),可以放心切換分支或處理其他任務了。

2. 查看已保存的stash列表

如果保存了多個stash,或想知道之前存了什麼,可以用git stash list查看:

示例

git stash list

輸出示例

stash@{0}: On dev: 臨時保存用戶登錄頁面的bug修復進度
stash@{1}: On feature/pay: WIP on feature/pay: a1b2c3d

每個stash都有一個編號(stash@{0}是最新的,stash@{1}是之前的),以及對應的分支和消息。

3. 恢復stash的內容

處理完其他任務後,需要恢復之前保存的修改,有兩種方式:

  • 恢復並刪除該stash(最常用):用git stash pop
    它會恢復最近的stash(默認是stash@{0}),並將其從列表中刪除。

示例

  # 假設你修復完bug後,切回dev分支,恢復之前的stash
  git stash pop
  • 恢復但保留該stash:如果想保留stash(比如之後可能需要多次恢復),用git stash apply
    它會恢復指定的stash,但不會刪除原記錄。

示例

  # 恢復stash@{1}(第二個stash)
  git stash apply stash@{1}

注意:如果恢復時發生衝突(比如不同stash修改了同一行代碼),Git會提示“Automatic merge failed”。此時需要手動打開衝突文件,修改衝突部分(Git會用<<<<<<< HEAD等標記衝突位置),修改後執行git add <衝突文件>,再執行git stash pop(或apply)完成恢復。

4. 刪除不需要的stash

如果某個stash已經沒用了,可以用git stash drop刪除指定的stash:

示例

# 刪除stash@{1}(第二個stash)
git stash drop stash@{1}

重要git stash clear會刪除所有stash,謹慎使用!

常見問題與注意事項

  • stash保存的範圍
    Git stash會保存工作區暫存區的所有修改,但不會保存未跟蹤的文件(即git status中顯示“untracked”的文件)。如果需要保存未跟蹤文件,可使用git stash -u(或--include-untracked)。

  • 不要過度依賴stash
    stash適合臨時操作,長期的工作進度建議用git commit(即使還沒完成,也可以先提交一個“半成品”並寫好message),方便後續回溯。

總結

Git stash就像一個“臨時存儲袋”,幫你在切換任務或分支時,安全地保存當前的編碼進度,避免意外丟失未完成的代碼。掌握stash savestash liststash popstash drop這幾個核心操作,就能更靈活地管理開發流程啦!下次遇到需要“暫停”當前工作時,記得用stash哦~

小夜