Git 分支管理-git stash 和git stash pop

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

合并分支,冲突是难免的,在实际协作开发中我们遇到的情况错综复杂,今天就讲两个比较重要的命令使用git stash 和git stash pop

试想一下:1.假如我们在develop分支开发,这时候突然技术经理说有个紧急修复下,这修复bug之前说了,需要从master稳定版本开一个分支,而我们develop如果没有commit,而直接切换到master,会有如下提示:

 

[plain] view plain copy
  1. zxdeMacBook-Pro:hswallpager zs$ git checkout master  
  2. error: Your local changes to the following files would be overwritten by checkout:  
  3.     app/src/main/java/Activity.java  
  4. Please, commit your changes or stash them before you can switch branches.  
  5. Aborting  
  6.   
  7. zxdeMacBook-Pro:hswallpager zs$ git branch  
  8. * develop  
  9.   master  


根据提示,我们需要提交修改或者在切换分之前 stash 一下。而我们每次间断就要commit一次,将来git log里会有很多临时提交,太多了让人无法快速定位,而这的确不是我们想要的,那就只有stash。stash的含义就是把工作区的修改临时储藏起来,等以后再恢复使用。那我们不妨一试git stash,看看结局是什么样子的:

 

 

[plain] view plain copy
  1. zxdeMacBook-Pro:hswallpager zs$ git stash  
  2. Saved working directory and index state WIP on develop: b70f2af  develop update  
  3. HEAD is now at b70f2af  develop update  

 

 

先看最后一句 "HEAD is now at b70f2af develop update". 还记得上一篇的分支图吧。

 

[plain] view plain copy
  1. *   073fc5c 合并后的修改  
  2. |\    
  3. | * b70f2af  develop update  
  4. * | 41754e3 修改  
  5. |/    

 

 

因为我们上一篇master合并后develop后,并没有将develop的分支和master同步,因此develop分支的最新的提交记录就在b70f2af,也就是工作区目前是干净的。git stash  执行后,develop分支就相当于什么也没操作一样。

 

接着我们在执行最开始的切换到master分支,看看会怎样,还会不会提示上述信息:

 

[plain] view plain copy
  1. zxdeMacBook-Pro:hswallpager zs$ git checkout master  
  2. Switched to branch 'master'  
  3. Your branch is ahead of 'origin/master' by 8 commits.  
  4.   (use "git push" to publish your local commits)  
  5.   
  6. zxdeMacBook-Pro:hswallpager zs$ git branch  
  7.   develop  
  8. * master  


怎么样,是不是正确切换到master分支了。现在我们在新建并切换分支hotfixes-01.然后可以修复紧急bug了。然后修改,提交,删除hotfixes-01即可。然后我们继续切回develop分支:

 

 

[plain] view plain copy
  1. zxdeMacBook-Pro:hswallpager zs$ git checkout develop  
  2. Switched to branch 'develop'  
  3. zxdeMacBook-Pro:hswallpager zs$ git status  
  4. On branch develop  
  5.   
  6. nothing to commit, working directory clean  

 

 

这时候我们可以先把master分支的修改合并到develop,操作步骤以前也学过了,合并冲突等。这时候我们看会代码,stash之前的代码已经看不到了。那我们怎么继续接着上述的修改恢复现场呢。这时候用到git stash pop
我们先看一下stash清单,执行git stash list

 

[plain] view plain copy
  1. zxdeMacBook-Pro:hswallpager zs$ git stash list  
  2. stash@{0}: WIP on develop: b70f2af develop update  


然后我们用git stash pop 恢复现场,看一下结果:

 

 

[plain] view plain copy
  1. zxdeMacBook-Pro:hswallpager zs$ git stash pop  
  2. On branch develop  
  3.   
  4. Changes not staged for commit:  
  5.   (use "git add <file>..." to update what will be committed)  
  6.   (use "git checkout -- <file>..." to discard changes in working directory)  
  7.   
  8.     modified:   app/src/main/java/Activity.java  
  9.   
  10. no changes added to commit (use "git add" and/or "git commit -a")  
  11. Dropped refs/stash@{0} (44c79bddb5c6c3848bc0de0b687cf14d4907b012)  

 

 

 

这时候在看工作区的源代码,发现已经正确恢复现场,可以继续在以前基础上工作了。

 

2.现在另一种情况:你pull最新代码,但这时候你又不想重新增加commit记录,这时候先git stash,然后pull,最后在git stash pop,

 

这1和2两种情况在实际开发过程中会经常用到,要熟练掌握git stash的应用。

补充:在我们多次使用git stash 后,git栈里充满了很多未提交的代码,这时候用git stash list 可以讲git 栈信息打印出来,比如

git stash apply stash@{1} 就代表把指定版本号为stash@{1}的工作取出来。清空的话使用git stash clear

 

git stash pop 和 git stash apply 的不同:

apply 读取暂存区的数据,通过apply后,暂存区的数据依然存在。

pop 是取出最新的一次暂存数据,pop后,暂存区就不会存在这次数据了。

 

总结:

git stash  #可用来暂存当前正在进行中的工作

git stash pop  #从git栈中恢复第一个。相当于git stash apply 和git stash drop

git stash list   #打印git栈中的所有信息

git stash clear  #清空git栈

git stash apply stash@{1}  #将你指定版本号为stash@{1}的工作取出

 

版本分支是git区分集中式版本控制的一大优势,而为了保证团队协作中顺利的开发,建议大家多用分支,至于具体分支的命名,不必拘泥死板,根据自己团队的实际情况,让分支成为我们团队开发的助推器,而不是拖后腿。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

useState语法讲解

useState语法讲解 语法定义 const [state, dispatch] useState(initData)state&#xff1a;定义的数据源&#xff0c;可视作一个函数组件内部的变量&#xff0c;但只在首次渲染被创造。dispatch&#xff1a;改变state的函数&#xff0c;推动函数渲染的渲染函数。dispatch有两…

NSOperation的进阶使用和简单探讨

本文将会从多个方面探讨NSOperation类和NSOperationQueue类的相关内容 一、简介 NSOperation类是iOS2.0推出的&#xff0c;通过NSThread实现的,但是效率一般。 从OS X10.6和iOS4推出GCD时&#xff0c;又重写了NSOperation和NSOperationQueue&#xff0c;NSOperation和NSOperati…

Android应用开发—LayoutParams的用法

Android应用开发—TextView的动态创建 这篇文章讲到了“TextView控件布局位置的控制”&#xff0c;主要依赖于RelativeLayout.LayoutParams的使用&#xff0c;本文简单介绍下LayoutParams的用法 注&#xff1a;本文大部分内容参考android,利用layoutParams代码动态布局空间位置…

廖雪峰Java1-2程序基础-7布尔运算符

布尔运算符 关系运算符&#xff1a;>&#xff0c; >&#xff0c; <&#xff0c; <&#xff0c; &#xff0c;!与运算 &&或运算 |非运算 &#xff01;int n 5;boolean t n > 0;//trueboolean f n < 0;//falseboolean isFive n 5;//trueboolean i…

第二十一届国际C语言混乱代码大赛结果公布

摘要&#xff1a;国际C语言混乱代码大赛&#xff08;IOCCC, The International Obfuscated C Code Contest&#xff09;是一项著名的国际编程赛事&#xff0c;从1984年开始到2006年&#xff0c;每年举办一次。2006年后中止了多年&#xff0c;2011年又开始恢复。比赛的目的是写出…

QuartZ Cron表达式

CronTrigger 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 CronTriggers往往比SimpleTrigger更有用&#xff0c;如果您需要基于日历的概念&#xff0c;而非SimpleTrigger完全指定的时间…

maven02-----Maven项目构建的初次使用

一. 创建Maven项目 1.1 建立一个Hello项目 当然也可以通过java project的方式创建符合Maven约定的目录结果的项目&#xff0c;并手动建立pom.xml文件&#xff0c;但是太繁琐了。因此&#xff0c;这里直接建立maven项目。note: eclipse有内建的maven项目创建功能&#xff0c;倘若…

微软超过苹果 成为全球第一大市值公司

11月23日周五盘中至收盘&#xff0c;微软市值正式超过苹果&#xff0c;成为世界上市值最高的公司。收盘时&#xff0c;微软市值为7533.4亿美元&#xff0c;苹果市值为7468.2亿美元&#xff0c;亚马逊市值为7366.2亿美元&#xff0c;谷歌市值为7255.2亿美元。 上次苹果与微软市值…

创新大赛成就创业梦想 超30%入榜应用获投资意向

摘要&#xff1a;腾讯开放平台宣布移动应用赛区正式开启&#xff0c;新一轮的创业梦想正在成长中。据悉&#xff0c;在腾讯开放平台应用创新大赛中诞生了多款DAU&#xff08;日活跃用户数&#xff09;超百万的应用。小鱼吃吃吃、开心泡泡猫等引领社交游戏潮流&#xff0c;视频达…

如何判断软件架构的好与坏

判断一个软件的架构的好与坏有很多方法&#xff0c;不过如果让我一句话来描述的话&#xff1a; 如果一个软件开发程度在70%以上的情况下&#xff0c;加入一个新功能&#xff0c;还需要涉及到大量的文件&#xff0c;代码的修改&#xff0c;那么这个软件架构一定很烂&#xff0c;…

网关(Gateway)详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连&#xff0c;是最复杂的网络互连设备&#xff0c;仅用于两个高…

【重点突破】—— React实现富文本编辑器

前言&#xff1a;富文本编辑器Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器&#xff0c;所见即所得的文本编辑器。 一、安装插件 react-draft-wysiwyg&#xff1a; 文本编辑器插件 draftjs-to-html&#xff1a;文本转换为html的插件 yarn add react-draft-wysiwyg draftj…

1106: 回文数(函数专题)

题目描述 一个正整数&#xff0c;如果从左向 右读&#xff08;称之为正序数&#xff09;和从右向左读&#xff08;称之为倒序数&#xff09;是一样的&#xff0c;这样的数就叫回文数。输入两个整数m和n&#xff08;m<n)&#xff0c;输出区间[m&#xff0c;n]之间的回文数。 …

Ubuntu 12.10 正式发布

Canonical今天正式发布了Ubuntu 12.10版本&#xff0c;代号为“Quantal Quetzal”&#xff0c;意为量子绿咬鹃&#xff0c;绿咬鹃是一种生活在美洲的颜色极为鲜艳的鸟。Ubuntu的版本代号一直都这么奇怪。 在该版本中&#xff0c;改进了Unity桌面环境&#xff0c;弱化了本地应用…

Hibernate中1+N问题以及解决方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. Hibernate中的1N问题描述 在多对一关系中&#xff0c;当我们需要查询多的一方对应的表的记录时&#xff0c;可以用一条sql语句就能…

Android应用开发—通用的GridView网格分割线

注&#xff1a;本文基于 Android RecyclerView 使用完全解析 体验艺术般的控件 中关于GridView网格分割线部分代码扩展而来。 原接口代码&#xff1a; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import andro…

hdfs部署

一、下载Hadoop 2.6.0-cdh5.7.0的tar.gz包并解压&#xff1a; wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz cd /usr/local/hadoop-2.6.0-cdh5.7.0/ ls bin bin-mapreduce1 cloudera etc examples …

JVM技术周报第2期

JVM技术周报第2期 JVM技术周报分享JVM技术交流群的讨论内容&#xff0c;由群内成员整理归纳而成。如果你有兴趣入群讨论&#xff0c;请关注「Java技术精选」公众号&#xff0c;通过右下角菜单「入群交流」加我好友&#xff0c;获取入群详情。 1、如何阅读源码&#xff1f; 在我…

最长重复子串和最长不重复子串求解

最长重复子串和最长不重复子串求解 本文内容框架&#xff1a; 1 最长重复子串 基本方法、KMP算法求解、后缀数组求解 2 最长不重复子串 基本方法、动态规划、动态规划Hash 3 小结 1最长重复子串 1.1问题描述 首先这是一个单字符串问题。子字符串R 在字符串L 中至少出现两…