天天看點

git stash 部分檔案

開發過程中經常會需要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部分檔案就有兩種方式:

  1. 使用-p進行互動式操作(适合需要具體到修改的時候,例如某個檔案中部分需要stash部分不需要)
  2. 通過在指令後面直接指定檔案(一般情況肯定這個友善)
# 指定說明資訊并stash所有java檔案的修改
$ git stash push -m "this is a partly stash test" **/*.java