Git 使用 stash暂存代码

如果你修改了代码没有commit提交本地库,git拒绝你切换分支。 如果我们不想提交不完善的代码,但是得去修改一个紧急Bug,此时 stash 可将当前未提交到本地仓库的代码,储藏(stash)到Git的栈中,而不是仓库中。stash后工作区和上次提交的内容是一样的,工作区变干净了,等我们修完Bug,提交并push到远端仓库后,再使用git stash apply或者pop命令,将以前完成一半的工作区恢复回来。stash 常用在修改代码过程中,切换到其他分支去的时候。stash可以把当前工作区的修改“保存”起来,以后用git stash pop 恢复现场。stash是本地的,不会传到远端仓库上。

储藏到git栈中

git stash 

git stash命令会将工作区和暂存区的修改储藏(stash)到Git的堆栈中,同时建立一条说明信息,默认是最后一次提交的节点号。

git stash save  ‘注释说明信息’

git stash save [stashMessage]

git stash save ‘说明信息’ 是自定义说明信息,比较 git stash  多些了一点命令。它们效果一样,说明信息更加利于了解stash的内容。

应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令。示例如下:

$ git stash save   "test-cmd-stash"
Saved working directory and index state On autoswitch: test-cmd-stash
HEAD 现在位于 296e8d4 remove unnecessary postion reset in onResume function

$ git stash list
stash@{0}: On autoswitch: test-cmd-stash

顺序执行git stash save “test1”和git stash save “test2”命令,效果如下:

$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1

查看git栈中stash库里信息

git stash list

列出当前仓库下所有的stash条目,每一条stash用stash@{n}标识。

$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1

$ git stash list
stash@{0}: WIP on chatOptimize: e454bdde 预览图片切换不跳动居中
stash@{1}: On runShotCut: 44

stash信息格式:
stash@{index}: WIP on [分支名]: [最近一次的commitID] [最近一次的提交信息]

一个典型的输出如下:

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log

git show stash@{n}

当有多条记录并且过了一段时间忘记stash内容时通过该命令可以查看stash的具体内容

恢复工作区

恢复最近的储藏(stash)到工作区

通过git stash pop取出最近一次储藏的修改到工作区,而通过查看储藏列表的index的可以取出指定储藏中的修改到工作区

git stash pop   

git stash pop可取出最近一次储藏的修改,恢复到工作区中,并同时将该储藏从储藏记录列表中删除

$ git stash pop

git stash pop命令将stash的内容从git栈中弹出, 恢复之前的工作区修改 。默认弹出最上面的那条,即stash@{0}。

注:该命令将堆栈中最近保存的内容删除 。

$ git stash list
stash@{0}: WIP on chatOptimize: e454bdde 预览图片切换不跳动居中
stash@{1}: On runShotCut: 44

stash是多个分支在本地混合储藏的,不是说在某个分支上,stash pop 出来的就是当前分支的最顶上的stash储藏。如果多个分支都有stash,那么在提取stash的时候就有指定提取stash的{n}标识。

恢复指定的储藏(stash)到工作区

此外还可以在pop后加stash@{n}来指定要弹出的项目:恢复指定的进度到工作区。
 n是通过git stash list命令得到的

git stash pop stash@{1}

git stash apply

git stash apply将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会从堆栈中删除stash储藏。

$ git stash apply
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   src/main/jarwerwerwe.java

no changes added to commit (use "git add" and/or "git commit -a")

$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1
 
堆栈中的内容并没有删除。 


git stash apply命令可以通过名字指定使用哪个stash,默认使用最近的stash(即stash@{0})。

# 取出指定index的储藏的修改到工作区中
git stash apply stash@{index} 

删除stash

git stash drop 

使用git stash drop命令删除最近的一个储藏

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log

git stash drop命令 ,默认丢弃最上面的那条,即stash@{0},此外还可以在drop后加stash@{n}来指定要丢弃的stash条目。

删除指定的储藏

git stash drop stash@{index}
$ git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)

清除所有的stash

git stash clear

使用git stash clear命令,删除所有缓存的stash。


 

你可能感兴趣的:(git,git)