git stash
什么是Git Stash
在开发过程中,我们经常会遇到需要切换分支处理其他任务或者紧急修复bug的情况。但是,有时候我们可能还没有完成当前分支的工作,如果直接切换分支,那么未提交的修改会带来麻烦。
这个时候,Git提供了一个非常方便的功能——Git Stash。Git Stash可以帮助我们保存当前工作目录的修改,并把工作目录恢复到干净的状态,方便我们切换分支或者处理其他任务。
如何使用Git Stash
使用Git Stash非常简单,只需要在终端执行下面的命令即可:
git stash
执行这个命令之后,Git会把当前工作目录的修改保存到一个临时的存储区域中,并把工作目录恢复到干净的状态。
Git Stash的操作
保存当前工作目录的修改
执行git stash
命令即可保存当前工作目录的修改。Git会自动生成一个唯一的stash id来标识这个stash。当然,我们也可以给stash添加一个有意义的描述信息,以方便后续查找。
执行命令git stash save "<message>"
,其中<message>
为stash的描述信息。
查看保存的stash列表
执行命令git stash list
可以查看当前仓库保存的所有的stash。
$ git stash list
stash@{0}: WIP on master: 5234ada Add new feature A
stash@{1}: WIP on dev: 234sdf2 Fix bug B
stash@{2}: WIP on dev: 3542ea1 Refactor code C
stash@{0}表示最新的stash,stash@{1}表示前一个stash,以此类推。
恢复保存的stash
恢复保存的stash有两种方式:一种是使用git stash apply
命令,另一种是使用git stash pop
命令。
- 使用
git stash apply
命令,可以将stash中的修改应用到当前分支,但是并不会移除stash。
$ git stash apply stash@{0}
- 使用
git stash pop
命令,除了应用stash中的修改,还会从stash列表中移除这个stash。
$ git stash pop stash@{0}
删除保存的stash
执行命令git stash drop <stash>
即可删除指定的stash。
$ git stash drop stash@{0}
如果不传入<stash>
参数,则会删除最新的stash。
清空所有的stash
执行命令git stash clear
可以删除所有的stash,慎用该命令。
Git Stash的高级用法
多次保存stash
在一个分支上工作时,有时候可能会需要保存多个stash。例如,我们处理一个紧急bug的时候,可能会需要同时保存当前开发分支的进度和修改。
执行命令git stash save "<message>"
可以保存多个stash,每个stash都有唯一的stash id。
恢复指定stash的某部分修改
有时候,我们可能只希望恢复stash中的部分修改,而不是全部应用。
执行命令git stash show <stash>
可以查看指定stash中的修改。
$ git stash show stash@{0}
fileA.js | 3 ++-
fileB.js | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
执行命令git stash apply <stash> -- <file>
可以只恢复指定文件的修改。
$ git stash apply stash@{0} -- fileA.js
将stash应用到不同的分支
有时候,我们可能需要将stash中的修改应用到不同的分支上。
首先,使用命令git stash branch <branch> <stash>
可以创建一个新的分支,并将stash中的修改应用到该分支。
$ git stash branch new_branch stash@{0}
上述命令会创建一个新的分支new_branch
,并将stash@{0}中的修改应用到new_branch
中。
修改stash的描述信息
当我们保存stash时,如果没有为stash添加描述信息,或者要修改stash的描述信息,可以使用命令git stash branch <stash> <new_description>
。
$ git stash branch stash@{0} "New description"
总结
Git Stash是一个方便的功能,可以帮助我们在切换分支、处理紧急bug或其他任务时保护当前工作进度。