文档章节

git 命令之stash详解

就不穿小内
 就不穿小内
发布于 2016/02/25 09:59
字数 739
阅读 1079
收藏 1

git 详解

需求分析

人和电脑一样,会遇到中断,需要保存现在的上下文转而去处理其他更紧急的事情。我们在使用git的时候也会遇到这样的情况。当在需要紧急处理一个bug时,工作区内容又没有完成,不适合提交,想暂存起来。

方案实施

git提供了git stash命令来解决这样的需求。下面我们做一个完整实验来体验一下:

生成测试环境

// 初始化仓库,进行一次提交
# git init stash-test
# cd stash-test && echo 'hello'> readme
# git add . && git commit -m "init"

// 修改工作区和暂存区
# echo 'need to be stashed' >> readme
# git add readme

// 查看此时工作区和版本库区别
# git diff HEAD
diff --git a/readme b/readme
index ce01362..55d6c28 100644
--- a/readme
+++ b/readme
@@ -1 +1,2 @@
 hello
+need to be stashed

执行stash及恢复

// 暂存当前状态
# git stash

// 查看当前工作区和版本库区别
# git diff HEAD
==> 此时什么都没有输出,说明工作区被重置为HEAD指向内容了

// 显示已暂存列表
# git stash list
stash@{0}: WIP on master: 440e976 init

// 恢复暂存区和工作区进度
# git stash pop --index stash@{0}

// 查看工作区和版本库区别
# git diff HEAD
diff --git a/readme b/readme
index ce01362..55d6c28 100644
--- a/readme
+++ b/readme
@@ -1 +1,2 @@
 hello
+need to be stashed

哒哒~~之前的工作又回来啦

命令详解

注:

  •  []方括号中内容为可选,[<stash>]里面的stash代表进度的编号形如:stash@{0}, <>尖括号内的必填

git stash 对当前的暂存区和工作区状态进行保存。
git stash list 列出所有保存的进度列表。
git stash pop [--index] [<stash>] 恢复工作进度

--index 参数:不仅恢复工作区,还恢复暂存区
<stash> 指定恢复某一个具体进度。如果没有这个参数,默认恢复最新进度

如:以下命令恢复编号为0的进度的工作区和暂存区
# git stash pop --index stash@{0}

git stash [save message] [-k|--no-keep-index] [--patch]

这是git stash保存进度的完整命令形式
使用save可以对进度添加备注
# git stash save "这是保存的进度"

现在执行list,会发现后面会出现自定义的被合租
# git stash list
stash@{0}: On master: 这是保存的进度

-k和--no-keep-index指定保存进度后,是否重置暂存区
--patch 会显示工作区和HEAD的差异,通过编辑差异文件,排除不需要保存的内容。和git add -p命令类似

git stash apply [--index] [<stash>] 不删除已恢复的进度,其他同git stash pop
git stash drop [<stash>] 删除某一个进度,默认删除最新进度
git stash clear 删除所有进度
git stash branch <branchname> <stash> 基于进度创建分支


© 著作权归作者所有

就不穿小内
粉丝 4
博文 59
码字总数 32988
作品 0
海淀
私信 提问
git stash pop 冲突,git stash list 中的记录不会自动删除的解决方法

在使用git stash代码时,经常会碰到有冲突的情况,一旦出现冲突的话,系统会认为你的stash没有结束。 导致的结果是git stash list 中的列表依然存在,实际上代码已经pop出来了。 处理的方式非...

钱天兵
2017/06/30
0
0
《Git权威指南》读书笔记 第九章 恢复进度

9.1 恢复保存的进度 查看第五章保存的进度: 恢复进度: 查看工作区状态,进度已经找回了: 对找回进度的工作区做以下处理: (1)对当前的暂存区进行提交: (2)撤销之前的提交,工作区和暂...

一万
2016/07/18
59
0
【git命令】git-stash

应用场景 应用场景:使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们...

echojson
03/24
11
0
git push失败的解决办法(2)

错误一:Cannot rebase: You have unstaged changes 解决办法: Cannot rebase: You have unstaged changes. 那说明有修改过的文件 git stash git pull --rebase (每次push之前最好这样做一...

天王盖地虎626
03/07
779
0
git stash和git stash pop

git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个commit, 改完bug之后再stash...

JamesView
2018/02/01
23
0

没有更多内容

加载失败,请刷新页面

加载更多

不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤

数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查。 在数据库的增删改查操作中,使用最频繁的就是查询操作。而在所有查询操作中,...

HollisChuang
33分钟前
6
0
乐观锁和悲观锁

乐观锁和悲观锁 在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性的问题 事务的特性:原子性、一致性、隔离性、持久性 1、丢失修改:T1和T2两个事务对同一个数据进行修改,T1先...

大瑞清_liurq
41分钟前
5
0
Scrum敏捷价值观与原则

Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。如果还不知道Scrum敏捷开发的朋友们,请出门左转,点击 Scrum 了解。 敏捷价值观 个体和互动 高于 流程和工具 工作的软件 高于 ...

醉美閑聖
42分钟前
5
0
android焦点

final RelativeLayout relativeLayout=new RelativeLayout(context); relativeLayout.setClickable(true); relativeLayout.setFocusable(true); rel......

安卓工程师王恒
44分钟前
4
0
IP地址分配与中继设备简介

1. TCP/IP模型 TCP/IP协议是在OSI参考模型出现之间就被开发的,并广泛部署在计算机网络中。但是,后来由于概念混淆,TCP/IP模型的层次和名称往往与OSI模型的层次名称相互借用。如图1.所示。 ...

xiangyunyan
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部