git stash命令總結


一、當在一個分支的開發工作未完成,卻又要切換到另外一個分支進行開發的時候,除了commit原分支的代碼改動的方法外,我覺得git stash是一個更加便捷的選擇。

 

步驟如下:

1、添加改動到stash。在原分支 git stash save -a "messeag",網上很多很多資料都沒有加 -a 這個option選項,我想他們的代碼開發可能都是在原代碼上進行修改吧。而對於在項目里加入了代碼新文件的開發來說,-a選項才會將新加入的代碼文件同時放入暫存區。

2、恢復改動。如果你要恢復的是最近的一次改動,git stash pop即可,我用這個用的最多。如果有多次stash操作,那就通過git stash list查看stash列表,從中選擇你想要pop的stash,運行命令git stash pop stash@{id}或者 git stash apply stash@{id}即可。這方面網上的資料挺多的。

3、刪除stash。git stash drop <stash@{id}>  如果不加stash編號,默認的就是刪除最新的,也就是編號為0的那個,加編號就是刪除指定編號的stash。git  stash clear 是清除所有stash,整個世界一下子清凈了!

4、git stash pop  與 git stash apply <stash@{id}> 的區別。

當我使用git stash pop 和 git stash apply 幾次以后,我發現stash  list 好像比我預計的多了幾個stash。於是我便上網去了解了一下這兩個命令的區別。原來git stash pop stash@{id}命令會在執行后將對應的stash id 從stash list里刪除,而 git stash apply stash@{id} 命令則會繼續保存stash id。對於有點強迫症的我來說,是容不下越來越多的陳舊stash id 仍然存在的,所以我更習慣於用git stash pop 命令。

二、git stash 使用實例

 

it提供了git stash命令來解決這樣的需求。下面我們做一個完整實驗來體驗一下:

生成測試環境

// 初始化倉庫,進行一次提交
# 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> 基於進度創建分支


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM