git stash 贮藏你的修改

当你代码写的正嗨,突然老板跑过来对你说,有个紧急线上bug要修复。所以你必须要先切换到master分支,但是你目前在develop分支上,而且有一堆文件改动还未提交,你不想仅仅因为要切到主分支修个bug就为做了一半的工作创建一次提交,那么你可以用git stash 命令把你目前未提交的修改先储藏起来,等修好bug,从master分支上切回develop分支之后,再把改动从储藏中恢复出来,然后继续开发

通过执行git status我们会看到工作区中有一些文件改动:

$ git status

位于分支 develop

您的分支与上游分支 'origin/develop' 一致。

要提交的变更:

  (使用 "git reset HEAD <文件>..." 以取消暂存)

修改:    index.html

尚未暂存以备提交的变更:

  (使用 "git add <文件>..." 更新要提交的内容)

  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

修改:    index.scss

执行git stash 储藏当前的修改

$ git stash

保存工作目录和索引状态 WIP on develop: 9c0e4dc Update index.scss

储藏成功之后,在通过git status查看状态,发现工作区已经干净了

$ git status

位于分支 develop

您的分支与上游分支 'origin/develop' 一致。

无文件要提交,干净的工作区

这个时候我们就可以放心的切换到其他分支了,等临时的工作忙完之后,再切换回develop分支恢复储藏

查看储藏列表:

$ git stash list

stash@{0}: WIP on develop: 9c0e4dc Update index.scss

恢复储藏,如果不指定一个贮藏,Git 认为指定的是最近的贮藏

$ git stash apply

位于分支 develop

您的分支与上游分支 'origin/develop' 一致。

尚未暂存以备提交的变更:

  (使用 "git add <文件>..." 更新要提交的内容)

  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

修改:    index.html

修改:    index.scss

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

当然你也可以通过储藏的名字恢复储藏:

$ git stash apply stash@{0}

位于分支 develop

您的分支与上游分支 'origin/develop' 一致。

尚未暂存以备提交的变更:

  (使用 "git add <文件>..." 更新要提交的内容)

  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

修改:    index.html

修改:    index.scss

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

用apply 恢复储藏的内容之后,并不会把储藏删除,我们可以看到这个储藏还在:

$ git stash list

stash@{0}: WIP on develop: 9c0e4dc Update index.scss

我们可以用git stash drop命令来删除无用的储藏

$ git stash drop stash@{0}

丢弃了 stash@{0} (c0264554be0a5e247c9079d69911a4f8d87d6432)

如果想在应用储藏的同时把储藏删除,可以使用git stash pop 命令,可以看到命令执行成功之后,最后一行显示丢弃了储藏:

$  git stash pop

位于分支 develop

您的分支与上游分支 'origin/develop' 一致。

尚未暂存以备提交的变更:

  (使用 "git add <文件>..." 更新要提交的内容)

  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

修改:    index.html

修改:    index.scss

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

丢弃了 refs/stash@{0} (61342da090d0b7c11d669133d071961c3984edb1)

如果你在储藏文件的时候,一部分文件在工作区,一部分文件在暂存区,你直接执行git stash apply恢复储藏,那么文件都会被恢复到工作区。如果你想在恢复储藏的时候,完全还原以前的暂存状态,可以加上--index 参数

$ git stash apply --index

位于分支 develop

您的分支与上游分支 'origin/develop' 一致。

要提交的变更:

  (使用 "git reset HEAD <文件>..." 以取消暂存)

修改:    index.html

尚未暂存以备提交的变更:

  (使用 "git add <文件>..." 更新要提交的内容)

  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

修改:    index.scss

你在当前分支储藏的修改不仅可以恢复到当前分支,还可以恢复到任何分支

想要交流学习其他开发技术,请关注我微信公众号 全栈师否:

微信公众号 全栈师否
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。