【Git必看系列】—— Git巨好用的神器之git stash篇

应用场景

当我们开发一个新功能时会先从master拉出一个分支dev,然后在这个dev分支下吭哧吭哧的开始写代码开发新功能,就如下代码所示,我们在dev分支下开发Person类的新功能getId()

java 复制代码
public class Person {
    private int id;
    private String name;
    private int age;
    public Person(int id) {
        this.id = id;
    }
    // new feature by dev branch
    public int getId() {
        return String;      //  new feature have bug
    }
}

就在此时,线上版本master出现了bug,我们应该放下手头上新功能的开发工作先将master上的bug修复,这个时候dev分支下的改动怎么处理? - 向dev分支提交新功能的代码,然后再切换到master下 - 直接切换到master分支下

首先我们新功能的代码还没开发完成,其次新功能这里还有一些bug没解决,就这样把有问题的代码提交到dev分支中,虽然可以解决目前我们的处境但不是很妥;但是第二种方案,直接切换,明显更不妥。怎么办?我们好像陷入了困境......

!在这里插入图片描述(https://i-blog.csdnimg.cn/direct/9600cc8229e643cb91de43878795e932.jpeg#pic_center)

git stash使用语法

别急,git stash命令恰好可以完美解决该问题!
git stash命令用于暂时保存没有提交的工作。运行该命令后,所有没有commit的代码,都会暂时从工作区移除,回到上次commit时的状态。

它处于git reset --hard(完全放弃还修改了一半的代码)与git commit(提交代码)命令之间,很类似于"暂停"按钮。

js 复制代码
# 暂时保存没有提交的工作
$ git stash
Saved working directory and index state WIP on workbranch: 56cd5d4 Revert "update old files"
HEAD is now at 56cd5d4 Revert "update old files"

# 列出所有暂时保存的工作
$ git stash list
stash@{0}: WIP on workbranch: 56cd5d4 Revert "update old files"
stash@{1}: WIP on project1: 1dd87ea commit "fix typos and grammar"

# 恢复某个暂时保存的工作
$ git stash apply stash@{1}

# 恢复最近一次stash的文件
$ git stash pop

# 丢弃最近一次stash的文件
$ git stash drop

# 删除所有的stash
$ git stash clear

上面命令会将所有已提交到暂存区,以及没有提交的修改,都进行内部保存,没有将工作区恢复到上一次commit的状态。

使用下面的命令,取回内部保存的变化,它会与当前工作区的代码合并。

js 复制代码
$ git stash pop

这时,如果与当前工作区的代码有冲突,需要手动调整。

git stash命令可以运行多次,保存多个未提交的修改。这些修改以"先进后出"的stack结构保存。

git stash list命令查看内部保存的多次修改。

js 复制代码
$ git stash list
stash@{0}: WIP on new-feature: 5cedccc Try something crazy
stash@{1}: WIP on new-feature: 9f44b34 Take a different direction
stash@{2}: WIP on new-feature: 5acd291 Begin new feature

上面命令假设曾经运行过git stash命令三次。

git stash pop命令总是取出最近一次的修改,但是可以用git stash apply指定取出某一次的修改。

js 复制代码
$ git stash apply stash@{1}

git stash子命令一览:

js 复制代码
# 展示目前存在的stash
$ git stash show -p

# 切换回stash
$ git stash pop

# 清除stash
$ git stash clear
相关推荐
颜进强2 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
重生之小比特2 小时前
【C++进阶】map和set
java·开发语言·c++
需要8263 小时前
分布式事务:Seata AT/TCC/SAGA 的取舍与踩坑
java·spring boot·分布式·spring·spring cloud
晨小安3 小时前
ThreadLocal及其内存泄漏问题深度解析
java·jvm·tomcat·哈希表
誰能久伴不乏3 小时前
看懂 Git 团队协作全流程:分支、提交、PR、rebase 到底在干嘛
git
m0_587383003 小时前
深圳24小时自助健身房解决方案实战:从系统架构到部署指南
java·人工智能·spring boot·spring·系统架构·需求分析
今年下半年4 小时前
【VUE】整合腾讯地图、自定义区域边界、村委名称及资产统计(放大显示资产点位)
前端·javascript·vue.js
郑州光合科技余经理4 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
无序的浪4 小时前
测试博客-基于微服务的在线判题系统
java·spring cloud·docker·微服务·测试·在线判题
Elaine3364 小时前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础