https://blog.csdn.net/u010697394/article/details/56484492

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

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

  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,看看结局是什么样子的:

  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". 还记得上一篇的分支图吧。

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

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

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

  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分支:

  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。

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

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

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

Git 分支管理-git stash 和git stash pop的更多相关文章

  1. Git分支管理[三]

    标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 git分支管理命令 git branch #创建分支 git branch -v # ...

  2. GIT分支管理模型

    GIT分支管理模型 link: git-branching-model 主分支(Main branches) 项目两个常驻分支: master 主干分支(锁定),仅用于发布新版本,平时不能在上面干活, ...

  3. Git 分支管理是一门艺术

    转载: Git 分支管理是一门艺术 1 要确保:团队成员从主分支(master)获得的都是处于可发布状态的代码,而从开发分支(develop)应该总能够获得最新开发进展的代码. 2 "辅助分 ...

  4. Git 分支管理详解

    大纲: 1.前言 2.创建分支 3.切换分支 4.合并分支(快速合并) 5.删除分支 6.分支合并冲突 7.合并分支(普通合并) 8.分支管理策略 9.团队多人开发协作 10.总结 注,测试机 Cen ...

  5. Git—分支管理

    Git—分支管理 分支学习:branch称为分支,默认仅有一个名为master的分支.一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支. branch相关常用 ...

  6. [转载]理解 Git 分支管理最佳实践

    原文 理解 Git 分支管理最佳实践 Git 分支有哪些 在进行分支管理讲解之前,我们先来对分支进行一个简单的分类,并明确每一类分支的用途. 分支分类 根据生命周期区分 主分支:master,deve ...

  7. 02: git分支管理

    目录:GIT其他篇 01: git & github 02: git分支管理 目录: 1.1 Git常用命令 1.2 主要分支(保护分支) 1.3 特性分支:feature (开发分支合并到d ...

  8. git 分支管理——多人协作

    git 分支管理--多人协作 一般一个项目有一个master主分支,还有一个develop开发分支.主要是在develop分支上协作开发,然后merge合并到master主分支上. 当从远程仓库克隆时 ...

  9. Git分支管理及合并

    Git分支管理   建立分支 git branch [name]   切换到分支 git checkout [name]   查看有哪些分支 git branch   比较分支 git diff [b ...

  10. git学习------>Git 分支管理最佳实践

    ps:本文转载于 : https://www.ibm.com/developerworks/cn/java/j-lo-git-mange/index.html Git 是目前最流行的源代码管理工具.大 ...

随机推荐

  1. 如何隐藏掉Nginx的版本号

    最近新学习了一个命令curl,里面有一个参数-I可以查看到网站使用的是哪种服务器,比如: zhangxiaoliudeMacBook-Pro-2:~ zhangxiaoliu$ curl -I htt ...

  2. 蓝桥杯 历届试题 PREV-33 兰顿蚂蚁

    历届试题 兰顿蚂蚁   时间限制:1.0s   内存限制:256.0MB 问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中 ...

  3. Windows Server 2008 修改系统的SID

    故事背景:用VMware搭建了几个操作系统相同的虚拟机.安装成功一台后,直接拷贝已经生成的VMDK文件来构建其它的虚拟机. 一般情况下,如果复制的各个虚拟机只是单独使用,并且这些虚拟机不加入到域(Ac ...

  4. 关于mybatis中基本类型条件判断问题

    零:sql动态语句中经常会有根据数据库某个字段状态进行判断的 如:status=0为未激活,status=1为激活的,那搜索未激活时: <if test="model.activeSt ...

  5. 创建github怎样管理

    创建版本库 第一步: 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录 $mkdir learngit $cd learngit $pwd mkdir learngit 创建一个名叫“ ...

  6. .netcore 在linux 上运行 Helllo World 例子

    要想在linux上运行netcore ,需要在linux 安装netcore SKD 下面分两步完成, 首先我的操作系统是 Ubuntu 14.04 ,不同版本可以参考 官网给出的连接 https:/ ...

  7. java中的死锁现象

    死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不可能正常终止. java 死锁产生的四个必要条件: 1.互斥使用,即当资源被一个线 ...

  8. RegisterUserFunc为测试对象添加新方法或重写已有方法

    QTP中为了提高扩展性,提供了一个为测试对象添加一个新的自定义方法,或者重写测试对象已有的方法的函数RegisterUserFunc,在此给大家分享一下. RegisterUserFunc:为测试对象 ...

  9. JavaScript语言基础-包装对象

  10. 回调函数(callback)经典解答

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:常溪玲链接:http://www.zhihu.com/question/19801131/answer/13005983来源: ...