需求分析spa
人和電腦同樣,會遇到中斷,須要保存如今的上下文轉而去處理其餘更緊急的事情。咱們在使用git的時候也會遇到這樣的狀況。當在須要緊急處理一個bug時,工做區內容又沒有完成,不適合提交,想暫存起來。code
方案實施htm
git提供了git stash命令來解決這樣的需求。下面咱們作一個完整實驗來體驗一下:rem
生成測試環境get
// 初始化倉庫,進行一次提交 # git init stash-test # cd stash-test && echo 'hello'> readme # git add . && git commit -m "init" // 修改工做區和暫存區 # echo 'need to be stashed' >> readme # git add readme // 查看此時工做區和版本庫區別 # git diff HEAD diff --git a/readme b/readme index ce01362..55d6c28 100644 --- a/readme +++ b/readme @@ -1 +1,2 @@ hello +need to be stashed
執行stash及恢復
// 暫存當前狀態 # git stash // 查看當前工做區和版本庫區別 # git diff HEAD ==> 此時什麼都沒有輸出,說明工做區被重置爲HEAD指向內容了 // 顯示已暫存列表 # git stash list stash@{0}: WIP on master: 440e976 init // 恢復暫存區和工做區進度 # git stash pop --index stash@{0} // 查看工做區和版本庫區別 # git diff HEAD diff --git a/readme b/readme index ce01362..55d6c28 100644 --- a/readme +++ b/readme @@ -1 +1,2 @@ hello +need to be stashed
噠噠~~以前的工做又回來啦
命令詳解
注:
[]方括號中內容爲可選,[<stash>]裏面的stash表明進度的編號形如:stash@{0}, <>尖括號內的必填
git stash 對當前的暫存區和工做區狀態進行保存。
git stash list 列出全部保存的進度列表。
git stash pop [--index] [<stash>] 恢復工做進度
--index 參數:不只恢復工做區,還恢復暫存區 <stash> 指定恢復某一個具體進度。若是沒有這個參數,默認恢復最新進度 如:如下命令恢復編號爲0的進度的工做區和暫存區 # git stash pop --index stash@{0}
git stash [save message] [-k|--no-keep-index] [--patch]
這是git stash保存進度的完整命令形式 使用save能夠對進度添加備註 # git stash save "這是保存的進度" 如今執行list,會發現後面會出現自定義的被合租 # git stash list stash@{0}: On master: 這是保存的進度 -k和--no-keep-index指定保存進度後,是否重置暫存區 --patch 會顯示工做區和HEAD的差別,經過編輯差別文件,排除不須要保存的內容。和git add -p命令相似
git stash apply [--index] [<stash>] 不刪除已恢復的進度,其餘同git stash pop
git stash drop [<stash>] 刪除某一個進度,默認刪除最新進度
git stash clear 刪除全部進度
git stash branch <branchname> <stash> 基於進度建立分支