【Git】stash 用法總結

weixin_33866037發表於2017-04-11

本文主要參考

stash是我在工作中會經常用到的命令,因為我們在工作中經常會遇到臨時情況,需要保留當前工作區的修改,轉而去做其他程式碼的修改;另外我在更新分支程式碼的時候也習慣於先將當前工作區的程式碼先用stash儲存起來,然後再更新分支程式碼,最後apply stash進行程式碼的衝突處理,這樣做會更加的安全。stash的使用比較簡單,但stash仍然有一些不常用的用法,這裡我做簡單總結一下。

1. 基礎——道理大家都懂,就怕只有我不知道

stash命令主要用於處理工作目錄雜亂的狀態,即將所有工作區修改、跟蹤的檔案以及暫存區保持的檔案打包,然後將未完成的修改儲存到一個棧上。相當於將當前分支恢復到最近一次提交的狀態。
來看看stash的基礎用法:

  • <b>git stash list </b> 檢視stash列表
  • <b>git stash ( pop | apply ) [<stash>] </b> 從stash棧中的某一個stash應用到當前工作區中(注:pop在應用完後會刪除這個stash,apply則仍然保留)例:git stash apply stash@{0}
  • <b>git stash drop [<stash>]</b> 刪除指定索引的stash 例:git stash drop stash@{0}
  • <b>git stash clear</b> 清空所有儲存的stash列表
  • <b>git stash save [<message>]]</b> 將當前工作區、暫存區的改動儲存到stash棧中
  • <b>git stash show [<stash>] 檢視某一個stash的檔案</b>
2.擴充套件——不常用的也要多多瞭解啊,以備不時之需

<b>git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]</b>

① [-p|--patch] 會顯示工作區和HEAD的差異,通過編輯差異檔案,排除不需要儲存的內容。和git add -p命令類似。在輸入git stash save -p 後,系統會提示: <b>Stash this hunk [y,n,q,a,d,/,e,?]? </b> 其中y,n,q,a,d,/,e分別表示:
<pre>
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk nor any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk nor any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk

       s - split the current hunk into smaller hunks
       e - manually edit the current hunk
       ? - print help

</pre>

②[-k|--[no-]keep-index] 是否重置暫存區,預設stash save 在儲存之後會重置暫存區,如果不希望重置暫存區,可以使用git stash save -k
③[-q|--quiet]終端不列印輸出
④[-u|--include-untracked]把沒有新增到git的檔案也會儲存起來(例如剛剛新建的檔案)
⑤ [-a|--all] 會把忽略的檔案也儲存下來

注:文中如有任何錯誤,請各位批評指正!