1. 程式人生 > 其它 >git Stash詳細介紹:git stash和git pop的詳細用法

git Stash詳細介紹:git stash和git pop的詳細用法

git Stash詳細介紹:git stash和git pop的詳細用法



一、背景

我們經常會遇到這樣的情況:

在開發過程中,在一個分支開發新的功能,還沒開發完畢,做到一半時有反饋需要處理緊急bug,但是新功能開發了一半又不想提交。

分支有改變時不提交又不能切換分支,如下:

這時就可以使用 git stash ,stash 就是為此而生的!

二、使用

2.1 使用之前,先簡單瞭解下 git stash 幹了什麼:

它會儲存當前工作進度,會把暫存區和工作區的改動儲存到一個未完結變更的堆疊中;執行完這個命令後,在執行 git status 命令,就會發現當前是一個乾淨的工作區,沒有任何改動。

  1. git stash 是本地的,不會上傳到伺服器上;
  2. 可以通過使用git stash save 'message...'可以新增一些註釋。

2.2 git stash 相關命令

命令名 作用
git stash 隱藏當前的工作現場, 此時, git status的結果是 clean
git stash list 檢視所有隱藏, 每一行的冒號前面的字串就是標識此隱藏的id
git stash apply 重新顯示標識為 id 的隱藏
git stash drop git apply恢復隱藏後, 需要手動刪除 list 列表中的記錄
git stash pop 恢復最新的進度到工作區
git stash pop stash@[stash_id] 恢復指定的進度到工作區

2.3 使用流程

一般先使用 git stash list 檢視有沒有已經 stash 的記錄,避免和自己的混淆,到時候使用時不知道是哪條記錄

檢視有無用的 list,可以先使用 git stash drop n 刪除,直到 list 為空

  1. 執行 git stash

預設是不帶註釋的,想要後面看的更清楚該 stash 是儲存的什麼,可以如下操作:

執行  git stash save "commend"

  1. 檢視剛才儲存的工作進度 git stash list

儲存註釋的長這樣:

可以看到 stash@{0} 是剛才儲存的

  1. 這時候在看分支已經是乾淨無修改的(改動都有暫存到 stash)
  1. 現在就可以正常切換到目標分支,進行相應操作
  1. 其他分支處理完成,再切回來使用剛才的 stash, 還是先檢視 暫緩列表
  1. 選擇使用暫緩 git stash apply **n**

這時就看到剛才儲存的工作進度,已經原樣恢復~大功告成!

繼續開發。。。


先來思考一下,為什麼會使用 stash 命令?

在專案開發中,基本都會遇到這樣的情況:本來你在自己的分支上愉快的開發功能A,但是突然加了一個優先順序很高的需求B或者有bug需要先修復掉。但這個時候,你新做的功能A剛開發到一半,總不能先提交A再開發B,或者直接拉個新分支切過去吧?(可以倒是可以,但是不推薦)

git stash在暫存區:存取、刪除

截圖部分(方便檢視)

內容部分(方便複製命令)

暫存區:存取、刪除
命令 說明
git add.、git stash 提交到暫存區
git stash 暫存工作區修改的內容:儲存到暫存區(可以提N次)
git stash pop 恢復暫存的工作區內容:從暫存區取出(最近一次)
git stash list 查詢工作區所有stash的列表
git stash apply stash@{2} 查詢後,恢復第二次提交的
git stash clear 清空暫存區的所有stash