開發過程中經常會需要stash(貯藏)部分檔案的場景,無奈sourcetree并不支援這種操作,gitkraken神器是可以的,但是現在收費了。是以隻能自己動手指令行搞起來了。
參考了一下官方文檔:
git stash指令有如下用法
git stash list [<options>]
git stash show [<stash>]
git stash drop [-q|--quiet] [<stash>]
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [-m|--message <message>]
[--] [<pathspec>…]]
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>
可以看到我們最常用的
git stash
其實是
git stash push
的縮寫。不過要使用這些參數的話就不能縮寫了,比如你想指定一個stash的說明,你可能會這樣:
但是這樣是不行的,你必須要:
可以看到push這個指令有最複雜的參數,簡單說明下:
-
-p|–patch
互動式stash,每個修改逐個确認,之後不停按y/n來選擇要stash的修改
-
-k|–[no-]keep-index
已經git add的檔案stash之後修改還保留
- -q|–quiet
-
-u|–include-untracked
新建立的檔案直接git stash是不會被stash的,加上這個就可以
-
-a|–all
比上一個-u更強,連被git ignore的檔案都可以stash
-
-m|–message <message>
指定一些說明性文字
-
[--] [<pathspec>…]
指定stash的檔案,但是如果其他檔案有被git add過,也會被同時stash。不過隻有指定的檔案的修改會從工作副本中clean掉。
那麼stash部分檔案就有兩種方式:
- 使用-p進行互動式操作(适合需要具體到修改的時候,例如某個檔案中部分需要stash部分不需要)
- 通過在指令後面直接指定檔案(一般情況肯定這個友善)
# 指定說明資訊并stash所有java檔案的修改
$ git stash push -m "this is a partly stash test" **/*.java