工作中,往往会遇到类似这样的情况:
正在a分支上写新功能,项目经理突然说b分支上有个bug需要修改。这时如果切换到b分支,那么所有在a分支上写的文件都会跟随到b分支,无奈之下,只能待在a分支止做个提交,然后切换到b分支。这样就莫名的多了个commit。
这时就是git stash的用武之地了。git stash是用于保存和恢复工作进度的。
一、备份文件
//完整命令
git stash [save [--patch] [-k|--[no]keep-index] [-q|--quiet] [<message>]]
保存当前的工作进度
//拆解命令1
git stash
什么参数不加,会分别对暂存区(没有add的)和工作区(add之后的)的状态进行保存。
//拆解命令2
git stash save "message"
save可以添加保存时的备注。示例:
git stash save "完成user接口"
//拆解命令3
git stash -k
-k 或–keep-index只备份没有add的文件。示例
git stash save --keep-index "部分文件"
二、查看备份列表
git stash list
显示备份列表。git stash是可以多次保存工作进度的,在恢复时候选择对应的项进行恢复。显示如下:
stash@{0}: On master: 部分文件
stash@{1}: On master: 完成user接口
stash@{2}: WIP on master: 3eef0b3 change primary database
stash@{3}: WIP on master: 3eef0b3 change primary database
三、恢复备份文件
方式一
//完整版命令
git stash pop [--index] [<stash>]
恢复备份文件
//拆解命令1
git stash pop
不使用任何参数,会恢复最近一次的备份文件(也就是stash list中的stash@{0}),并将恢复的工作进度从存储的工作进度列表中清除。
//拆解命令2
git stash pop stash@{1}
指定恢复
git stash list
中的某一个备份进度。
方式二
git stash apply [--index] [<stash>]
除了不删除恢复的进度之外,其余和git stash pop 命令一样。
四、删除备份列表
git stash drop [<stash>]
删除一个存储的进度。默认删除最新的进度。
git stash clear
删除所有存储的进度
五、使用技巧
常规 git stash 的一个限制是它会一下暂存所有的文件。有时,只备份某些文件更为方便,让另外一些与代码库保持一致。一个非常有用的技巧,用来备份部分文件:
- add 那些你不想备份的文件(例如: git add file1.js, file2.js)
- 调用 git stash –keep-index。只会备份那些没有被add的文件。
- 调用 git reset 取消已经add的文件的备份,继续自己的工作。