Git -- Stash
git stash(储藏)
准备好项目, 然后修改某个文件.
这时, 如果我不准备commit这个文件的话, 我需要立即修改改另外一个文件.
为了保存这第一个变化, 就可以使用git stash命令.
“‘stash”“可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
git stash save
git stash
可以不加save参数, 因为执行git stash 默认就带着save参数.
可以看到没有需要commit的变化了.
打开修改的文件, 又恢复到原来的样子了.
然后我再做一些修改, 修改另一个文件:
然后commit:
现在是clean working directory.
那么刚才的stash 怎么办呢?
git stash apply.
这个命令会显示出来当前的状态. 这时打开我第一次修改的文件, 发现我做出的变化又出现了.
然后 commit即可:
但是到现在还没完, 下面执行这个命令:
git stash list:
因为我们已经apply这个stash了, 所以可以把它删掉了:
git stash drop, 它会删除最新的一个stash.
Stash Untracked / Pop.
git stash 只对被追踪的文件起作用.
修改某个被追踪的文件.
然后添加一个文件, 这个文件暂时git还没有去追踪.
如果现在执行git stash:
那么它只会保存被追踪文件的变化. 而未追踪的文件依然可以看到:
现在把保存恢复:
git stash apply:
然后删除这个stash:
现在有几种可选的做法:
1. 可以把未追踪的文件添加到staging 区.
2. 或者你仍想把这个未追踪的文件保存起来, 那么可以使用git stash 加参数, 下面就做这个:
git stash -u.
现在就是clean working directory了.
然后编辑另一个文件, 然后commit:
然后我在apply之前的stash, 这次我将使用一个更直接的命令:
git stash pop 它相当于这两个命令: git stash apply 和 git stash drop (apply并drop上一个stash).
然后我删除z.txt. commit.
多个Stash.
修改某个文件, 然后执行stash, 这次加上save参数, 并指定信息:
git stash save "xxx".
再修改另一个文件, 并stash:
然后再修改上面的一个文件, 并stash:
列出stash:
注意, 这里0表示最新的一个stash.
查看某个stash:
git stash show stash@{1}.
具体恢复某一个stash:
git stash apply stash@{1}.
然后删除这个stash:
git stash drop stash@{1}.
剩下的stash的索引可能会更新一下.
如果剩下的stash我不需要了:
git stash clear:
Stash到分支.
现在项目的状态是有一个变化还没有stage:
我再修改其他几个文件:
我把README.md添加到staging区:
我再添加一个新文件 z1.txt:
现在文件的状态有3种, 等待被commit的, 没有 stage的, 未被追踪的.
首先执行stash 所有文件:
然后我把这个stash apply到分支上:
git stash change xxx分支名.
这个过程发生了好几件事:
1.创建了一个分支, 并切换到这个分支了
2.apply 这个stash到这个分支
3.删除了这个stash.
查看状态:
然后commit, 并合并到master分支:
最后删除分支:
- WCF如何克服HTTP传输协议的局限提供对不同消息传输模式的实现
- H5手游大事件:腾讯上线“微信小游戏”!支持群分享与内购
- 我所理解的Remoting(2):远程对象生命周期的管理[上篇]
- 谈谈分布式事务(Distributed Transaction)[共5篇]
- SQLXML初体验:用XML代替T-SQL来操作数据库
- 自己动手写可视化软件(代码已开源)
- 探秘Tomcat——连接篇
- 微信小游戏正式上线,H5游戏迎新机遇
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]
- WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]
- 成为更好程序员的8种途径
- 探秘Tomcat——启动篇
- ai量化系统架构的思考
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法