git stash

git stash

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或其他任务时保护当前工作进度。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程