git 怎么切换分支命令_Git(六):git stash 命令

本文详细介绍了如何使用Git的git stash命令在开发过程中临时保存未完成的修改,以便于切换到其他分支处理紧急任务,如修复线上bug。内容包括stash的应用场景、命令用法、多次储藏、查看储藏记录、标识储藏记录以及如何取出储藏的修改,帮助开发者高效管理代码变更。
摘要由CSDN通过智能技术生成

e278712f23c7f9245bc59c47025b1698.png

本文将介绍Git中的 git stash 命令

应用场景

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

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分支中,虽然可以解决目前我们的处境但不是很妥;但是第二种方案,直接切换,明显更不妥。怎么办?我们好像陷入了困境……

git stash 命令

别急,Git提供了一个git stash命令恰好可以完美解决该问题, 其将当前未提交的修改(即,工作区的修改和暂存区的修改)先暂时储藏起来,这样工作区干净了后,就可以切换切换到master分支下拉一个fix分支。在完成线上bug的修复工作后,重新切换到dev分支下通过git stash pop命令将之前储藏的修改取出来,继续进行新功能的开发工作

执行下述命令来储藏dev分支下的修改

git stash

d22fabccc3d35cf77d018114dd47b1c9.png

可以看到此时我们的工作区已经干净了,dev分支中被修改的文件也已经恢复到了版本库中的版本,说明dev分支修改已经被储藏成功了。这个时候我们就可以放心的切换到master分支下去修复我们线上版本的bug了。线上bug修复完成后,我们就可以继续开始之前的新功能的开发了

先切换到dev分支下:

git checkout dev

然后,取出之前储藏的修改

git stash pop

82927965c330777b5a414c04895c1a0c.png

从上图的执行结果可以看出,我们之前开发到一半的新功能又回来啦,这个时候,我们就可以再续前缘啦来接着开发新功能了

多次储藏

从上面的介绍,让我们对git stash命令有了一个基本的使用认知,其实,该命令可以将当前工作区的修改储藏来实现清空工作区。但是我们做了两次储藏(即,修改-储藏-再修改-再储藏)会发生什么呢?

查看储藏记录

执行下述命令来查看我们两次储藏后的结果

# 查看储藏记录列表
git stash list

f696ab851fb2b30f75e3f43ceca5f33e.png

从上图结果中,我们发现两次储藏记录的标识信息完全一致,只有其前面的index有别,这让我们很难确定我们所需取出的文件修改是储藏在哪一个中。在git默认按如下规则标识储藏记录(WIP意为work in progess, index用于后面取出所对应储藏的修改),由于我们在dev分支下的两次修改中均未发生提交,所以其最近一次的提交ID是一致的。

stash@{index}: WIP on [分支名]: [最近一次的commitID] [最近一次的提交信息]

标识储藏记录

可以通过下述命令来标记此次储藏,以便后期查看

git stash save [stashMessage]

如下所示,进行两次 修改-储藏 操作,并进行自定义标识

4705171a4ac1fbb15c6801acc70fc6eb.png

395523b7332554c6011358ebf0344cad.png

然后再执行 git stash list 查看储藏列表

fe2c4184d5f7905ae936826326e92b44.png

取出储藏

前文提到的可以通过git stash pop用于取出最近一次储藏的修改到工作区,而通过查看储藏列表的index的可以取出指定储藏中的修改到工作区

# 取出指定index的储藏的修改到工作区中
git stash apply stash@{index} 
# 将指定index的储藏从储藏记录列表中删除
git stash drop stash@{index}

687284d8a127d79ad2556f0b9ef22671.png

Note:

  1. git stash pop可取出最近一次储藏的修改到工作区中,并同时将该储藏从储藏记录列表中删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值