如果你修改了代码没有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 <file>..." to update what will be committed)
  (use "git checkout -- <file>..." 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 使用 stash暂存代码相关推荐

  1. Git快速入门-git stash 暂存变更,git reset 撤销commit,git revert 回退远程版本库

    Git快速入门系列文章 - Git快速入门-安装配置篇 - Git快速入门-常用命令之独奏篇 - Git快速入门-常用命令之交响乐篇 - Git快速入门-git stash 暂存变更,git rese ...

  2. IDEA中Git暂存代码暂存区的使用

    IDEA中Git暂存代码暂存区的使用 一.问题引入 二.解决方法 2.1 IDEA解决 2.1.1 暂存起来:在新分支中, 点击版本控制VCS-Git-Stash Changes 2.1.2 读取暂存 ...

  3. git stash暂存的操作

    git stash暂存的操作 多人开发,经常遇到开发某一个分支时,需要处理其他事情,这时就可以暂存手头的工作,进行其他工作,完事后再恢复,继续工作 1. 暂存操作 #查看当前状态git status ...

  4. git 取消 所有暂存_Git版本管理完全指南—学好Git一文足矣

    开心?一下 image.png 第一部分 命令行 1.分支操作 1. git branch 创建分支2. git checkout -b 创建并切换到新建的分支上3. git checkout 切换分 ...

  5. 误删暂存代码的恢复方法

    昨天因为将上传git的时候暂存了代码,后来误删把一天写的全部内容无了!在网上试了几个方法在这里分享一下. 方法1 git 误删文件和恢复指令 1.git fsck --lost-found :查看最近 ...

  6. git工作区、暂存区和仓库区

    git工作区.暂存区和仓库区 工作区 对于添加.修改.删除文件的操作,都发生在工作区中 暂存区 暂存区指将工作区中的操作完成小阶段的存储,是版本库的一部分 仓库区 仓库区表示个人开发的一个小阶段的完成 ...

  7. Git 工作区、暂存区和版本库

    基本概念 我们先来理解下Git 工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录 暂存区:英文叫stage, 或index.一般存放在 ".git目录下" 下的ind ...

  8. Git复习(九)之理解git工作区和暂存区

    前言 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 版本库 在工作区目录中有一个.git文件,这个其实不是工作区而是Git的版本库 版本库中包含两个部分,一个是暂存区index/ ...

  9. Git学习笔记之三:Git 工作区、暂存区和版本库

    基本概念我们先来理解下Git 工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫stage, 或index.一般存放在 ".git目录下" 下的ind ...

最新文章

  1. apn java_android设置移动联通电信wap接入点
  2. 授权管理【学习笔记】《卓有成效的管理者》 第二章 掌握自己的时间
  3. LeetCode Interleaving String(动态规划)
  4. 我也来说说Dynamic
  5. Android之使用getIdentifier()获取资源Id
  6. python实现最小二乘法的线性回归_最小二乘法求线性回归的python实现
  7. camel 使用_使用Camel从WildFly 8向WebLogic 12发送JMS消息
  8. 快速排序 java导包_排序算法-快速排序(Java实现)
  9. 教你一步搭建Flume分布式日志系统
  10. 关于javascript跳转与返回和刷新页面
  11. 计算机解决的气象复杂问题,自动气象站更换时计算机遇到的疑难问题及解决办法...
  12. Windows Server 2012 配置 Remote Desktop Service VDI
  13. arduino cc3000 php,【arduino】新手求助, 想问一下关於CC3000设置的问题
  14. 基于python爬虫的加盟品牌数据挖掘研究与实现_基于Python 语言的Web 数据挖掘与分析研究...
  15. JAVA实现邮件发送
  16. 【用Java模拟KTV点歌系统】
  17. Irvue for Mac(苹果壁纸软件)
  18. 如何在 Visual Paradigm 中创建流程图丨使用教程
  19. 小瓜讲matplotlib高级篇——坐标轴设置(坐标轴居中、坐标轴箭头、刻度设置、标识设置)
  20. 触摸屏分屏拓展屏软件(可自定义界面)

热门文章

  1. 关于中小学编程教育的一些看法
  2. 华为 编程语言实验室,薪水_作为实验室科学家学习编程
  3. 蓝桥杯大赛——练习系统登录
  4. 我生命的意义和价值是什么
  5. rhel centos 源_Rhel centos 7的fips脚本
  6. 智能优化与机器学习结合算法实现数据预测matlab代码清单
  7. 工作记录(JS向textarea添加固定内容、通过固定字符将字符串分割为数组)
  8. 变量、表达式与顺序语句
  9. MOS管在开关电路中的使用
  10. Holt-Winters方法预测水电发电量