IDEA中如何实现 git stash 命令的可视化操作?

news2025/1/11 22:42:11

目录

问题现象:

问题分析:

拓展:git stash 相关命令

1、git stash

2、git stash save '注释'

3、git stash list

4、git stash pop

5、git stash apply stash@{编号}

6、git stash drop stash@{编号}

7、git stash clear

8、git stash show

  解决方法:


问题现象:

        今天在项目想到一个问题:

        在同一个代码仓库中,如果我在当前分支(如:task/111-001-demo)上正在敲着代码,还没完成的;突然来个紧急任务要我切换到另一个分支(如:emergency)去修复某个bug或新增某个功能,那我当前分支还没写完的代码该怎么处置/保存呢?很显然我们需要在切换分支之前保存当前分支上的代码改动。

        那么问题来了:

        在切换分支之前该如何保存当前分支上的代码改动呢?

        最近发现了一种新的方法:就是使用 git stash 命令就可以很完美地解决上面这个问题,但在实际开发过程中很多人都是能不敲命令就不敲命令,于是就引出了一个新的问题:

        IDEA中如何实现 git stash 命令的可视化操作?


问题分析:

        我们可以分析一下上面这种情况:

1、由于是紧急任务(如:生产环境出现bug需要尽快解决),那么该任务优先级必然是最高的,需要优先处理。

2、由于紧急任务所在代码分支与当前代码的分支不同,因此需要切换分支。

3、当前分支有尚未完成的代码,需要保存,因为直接切换分支会导致当前分支上的改动丢失。

        OK,问题要素分析完了,可以发现最关键就是要保存当前代码的改动!那么顺序就应该是:

1、保存当前代码分支(如:task/111-001-demo)的改动;

2、切换到紧急任务分支(如:emergency);

3、解决紧急任务;

4、切换回当前分支(如:task/111-001-demo)继续开发之前尚未完成的代码。

        切记:在多人协作开发的场景下,不要把当前分支未完成开发的代码 commit并push 到远程库,然后直接去做你的紧急任务去了。因为远程库的改动很容易影响到其他开发者。

        那么在切换分支之前该如何保存当前分支上的代码改动呢?下面提供2种我以前常用的笨方法:

        1、将当前分支下发生了改动的文件都拷贝一份到某个自定义的备份目录中,后期切换回当前分支时再拷贝回去。

        优点:将发生改动的文件都备份起来,这样绝对不会发生丢失的问题。

        缺点:操作复杂而繁琐,如果要精确到具体发生改动的文件,则不仅需要挑出这些文件,还需要记录这些文件对应的存放路径;或者将整个父级目录备份,但很可能会包含没有发生改动过的文件,因此在子文件很多的时候,有些浪费时间和精力。

        2、在当前分支commit,后期切换回当前分支时可以直接在之前commit后的基础上继续开发。

        优点:操作简单方便,由于commit是提交到本地库,因此不会影响到远程库,也不会影响到其他开发者。

        缺点:当开发完成,需要push到远程库时,则需要执行commit和push操作,因此最终远程库上就会出现多条commit日志。

        那么,除了上面提到的2种笨方法之外,有没有更完美的第3种方法呢?

        确实有的,那就是使用 git stash 命令

        3、在当前分支,使用 git stash 操作可以将本地库对当前分支的所有改动放入本地缓存区(该缓存区未被删除,则会一直存在于本地库中),缓存完后当前分支就会回复到上一次从远程库pull之后的状态,此时可以直接切换到紧急任务分支去了,后期切换回当前分支时,重新加载本地缓存区即可还原到缓存前的状态。

        优点:不会影响远程库,也不需要commit操作。

        缺点:没有什么明显的缺点,硬要说的话,就是操作会比直接commit的操作复杂一点点。

        最近我才发现 git stash 命令的好用之处,估计也有很多小伙伴在实际开发中未曾使用过 git stash 命令。

        我猜:原因大概是因为在IDEA中,我们可以很明显的点击可视化按钮,如下:

         来快速实现commit和push操作,而不需要敲任何git命令。


拓展:git stash 相关命令

1、git stash

        创建stash缓存/暂存,保存当前分支的本地工作区与暂存区的状态,stash名为stash@{编号}。

2、git stash save '注释'

        创建stash缓存/暂存,保存当前分支的本地工作区与暂存区的状态,stash名为stash@{编号},并添加注释。与 git stash 的区别是:可以加注释。

        git stash save 'test git stash 001'

3、git stash list

        查看stash列表,可以看到本地库中当前分支上的创建的所有stash。

4、git stash pop

        还原至最新的一个stash(即stash@{0})的状态,并删除该stash。

        注意:该命令会在还原至stash@{0}的状态后,删除stash@{0}。

5、git stash apply stash@{编号}

        还原至指定stash(即stash@{编号})的状态。与 git stash pop 的区别是:不会删除stash,所以还原stash的时候,建议使用apply命令。

        使用方法:git stash apply stash@{编号}

6、git stash drop stash@{编号}

        删除某个指定stash,无法指定多个,一次只能删除一个。

        使用方法:git stash drop stash@{编号}

7、git stash clear

        删除全部的stash。

8、git stash show

        查看堆栈中最新保存的stash(最新保存的stash名一定是:stash@{0})和当前分支(缓存完后当前分支就会回复到上一次从远程库pull之后的状态)的差异,显⽰做了哪些改动。

        例如StaticClass.java文件,我敲了2个回车,则show结果如下:

        对比stash@{0}和当前分支差异之后,检测到路径为:

        src/main/java/com/stephen/javademo/statictest/StaticClass.java 

        有1个文件,和上一次从远程库pull之后的状态相比,发生了2个插入改动(2个回车符)。


        上面的拓展节点中,给大家介绍了一些git stash的常用命令,那么在实际开发中,是不是就一定要敲命令呢?

       【我知道有些人是比较懒或记性差的,我自己也是,能鼠标操作的,绝对敲命令,而且我也不想即命令。。。。。。这一点,请大家不要向我学习。】

        经过实践,我终于在IDEA开发工具中摸索出了最简单的stash使用方式。


  解决方法:

        缓存/暂存本地库中对当前分支的所有改动,在IDEA开发工具中的操作步骤如下:

        1、创建stash:点击菜单栏的 VCS-Git-Stash Changes... :

        弹出窗口如下,输入Message,勾选Keep index,点击 Create Stash按钮,如下:

        这一步其实就相当于调用了命令 git stash save 'test stash1';

        而 Keep index 的作用,直接上图吧:

        翻译过来的意思就是说:如果选中此复选框,则索引更改将保存在索引中。

         这个功能我就先不探究了,留给刚兴趣的小伙伴去实践一下,目前我就建议大家直接勾选就好了。

         2、查看stash列表:点击菜单栏的 VCS-Git-UnStash Changes... :

        弹出窗口,在Stashes项中可以看到我创建了4个stash,从上到下(从0到3)分别是最新到最旧。

        除此之外,还发现该窗口有很多非常实用功能,而且还对应了拓展节点中提到的大部分常用的 git stash 命令,例如:

        View:可以查看选中的stash中记录了什么文件及文件中的改动,如我选中第一个stash点击View:

        双击打开窗口中的StaticClass.java文件,可以查看具体的改动,如:

        Drop:相当于git stash drop stash@{编号},可以删除选中的stash。

        这里我测试一下删除最后一个stash(即stash@{3}),如图:

      

        Clear:相当于git stash clear,删除所有的stash。

        测试Clear,如图:

         点击Yes后,所有stash被删除:

        Pop stash:勾选之后,会发现原来的Apply Stash按钮变成了Pop Stash,就相当于git stash pop命令,还原至选中的stash,并删除该stash。 

        测试Pop Stash选中的stash(stash@{2}):

        可以发现Pop Stash之后,stash@{2}被自动删除了。

        Apply Stash:相当于git stash apply stash@{编号}命令,还原至选中的stash。

        测试Apply Stash选中的stash@{1}之后,发现stash@{1}还存在,未被自动删除。

        至此就完成了IDEA中实现 git stash 命令的可视化操作了。

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

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

相关文章

flutter 内网安装包生成二维码

参考 前言 有时候我们可能需要用手机访问电脑上的文件, 或者用手机测试电脑上编写的程序 此时 在同一个wifi网络的前提下我们可以这么做: 第一种 使用python 直接使用自带python工具开启http服务, 首先打开终端, 进入需要共享的目录,然后运行以下代码即可: python -m Simple…

React TreeSelect 组件使用和优化

1、自定义折叠和展开图标 此时就要用到switcherIcon属性,以下是antd中对switcherIcon属性的描述, switcherIcon自定义树节点的展开/折叠图标ReactNode | ((props: AntTreeNodeProps) > ReactNode)-具体使用如下: import { DownOutlined…

数据库原理及MySQL应用 | 事件

事件由一个特定的线程——事件调度器来管理,事件是根据指定时间表,在某一特定的时间点,触发相关的SQL语句或存储过程。 01、事件概述 事件(Event)是根据指定时间表执行的任务,是MySQL在相应的时刻调用的过程式数据库对象。它由事…

抓包分析ssh远程主机为何变慢了?

文章目录背景SSH协议握手过程ssh 抓包MAC层包传输tcp握手抓包解释三次握手的第一个报文- SYN包第一个报文对应的抓包详情三次握手的第二个报文- SYNACK包第二个报文对应的抓包详情三次握手的第三个报文- ACK包第三个报文对应的抓包详情ssh版本协议交换密钥协商key阶段Key Excha…

程序员的工资这么高,为什么还会有人离职?

出了社会以后才发现,班级里天天打鸡血的、最奋斗的、同时也最焦虑的,不是成绩最好的,也不是成绩最差的,而是那帮处于中间的人。 他们不像那些成绩最差的,或是天天摆烂,或是靠高情商混得风生水起&#xff1b…

Pytest----pluggy源码解读基础准备

【原文链接】Pytest----pluggy源码解读基础准备 解读pluggy源码,直接使用pytest环境中安装的pluggy即可,比如这里安装的pluggy版本是1.0.0,为了更好的理解源码,这里首先使用如下应用代码作为应用实例,从如下代码中可以…

低代码助力生产管理:离散型制造业MES系统

制造业作为我国国民经济的支柱产业,在我国经济增长中占有主导作用。而制造业对经济增长的贡献很大一部分来自于以离散制造业为代表的机械装备制造、汽车零部件制造等。因此,离散制造业的发展对我国经济增长具有举足轻重的作用。 离散型制造业的特点&…

中创股份在科创板提交上会稿:计划募资6亿元,景新海为董事长

12月8日,山东中创软件商用中间件股份有限公司(下称“中创股份”)在上海证券交易所科创板提交招股书(上会稿)。相较于此前招股书,中创股份补充了截至2022年9月30日的财务数据等信息。 据贝多财经了解&#x…

记一次 Eclipse 打包的辛酸历程

文章目录1:背景2 maven 工程3 普通工程3.1 打可执行的 jar3.2 打普通 jar4: 运行 jar 包1:背景 偶然的境况下,被迫使用了 Eclipse 进行代码。遇到的代码也有点奇怪,main 方法启动 java 工程,里面封装 Tomc…

音频声音信号

音频信号是模拟信号,我们需要将其保存为数字信号,才能对语音进行算法操作,WAV是Microsoft开发的一种声音文件格式,通常被用来保存未压缩的声音数据。 通道数:同时有个几个设备在进行音频的采样;采样频率&a…

Django连接MySQL与正反向迁移命令

目录 连接MySQL 方法一:pymysql连接 方法二:mysqlclient 迁移命令 连接MySQL 方法一:pymysql连接 第一步:修改settings.py配置文件中的DATABASES: DATABASES {default: {ENGINE: django.db.backends.mysql,HOS…

【车载开发系列】UDS诊断---动态定义DID($0x2C)

【车载开发系列】UDS诊断—动态定义DID($0x2C) UDS诊断---动态定义DID($0x2C)【车载开发系列】UDS诊断---动态定义DID($0x2C)一.概念定义1)DID定义方式2)DID失效条件二.应用场景三.报…

【Python游戏】今天小编用Python实现了一个植物大战僵尸小游戏 | 附源码

前言 halo,包子们下午好 今天给打击整一个植物大战僵尸 无广告版本 哈哈 说实话,现在的小游戏很多都是有广告,多少有点难受 今天给大家直接安排 相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 源码点…

java基于Springboot的社区维修平台-计算机毕业设计

项目介绍 系统管理也都将通过计算机进行整体智能化操作,对于社区维修平台所牵扯的管理及数据保存都是非常多的,例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理…

4G远程智能巡检摄像机功耗测试对比

对于一款输电线路监控设备,由于装在铁塔上面,对于功耗,电网上面的应用,尤为重要,如何得做到低功耗,一直大家研究的地方,解决了功耗,基本产品成功了一半,而合方圆在电网行…

对称加密算法(一)(替换算法,Caesar, Playfair, Hill Cipher,Polyalphabetic Cipher)

文章目录Symmetric Cipher ModelSubstitution TechniquesCaesar CipherMonoalphabetic CiphersPlayfair CipherHill CipherPolyalphabetic CipherVigenere CipherVernam CipherOne-Time PadReferences对称加密,也被称为传统加密、单钥加密或私钥加密,是 …

Flink系列-1、流式计算简介

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址:https://flink.apache.org/ 学习资料:https://flink-learning.org.cn/ 目录数据的时效性…

【pytorch】使用pytorch自己实现LayerNorm

pytorch中使用LayerNorm的两种方式,一个是nn.LayerNorm,另外一个是nn.functional.layer_norm 1. 计算方式 根据官方网站上的介绍,LayerNorm计算公式如下。 公式其实也同BatchNorm,只是计算的维度不同。 下面通过实例来走一遍公式 假设有如下的数据 …

JQuery 高级

目录 1. 动画 1. 三种方式显示和隐藏元素 1. 默认显示和隐藏方式 2. 滑动显示和隐藏方式 2. 遍历 1. js的遍历方式 2. jq的遍历方式 5. 插件:增强JQuery的功能 1 . 实现方式: 1. $.fn.extend(object) * 增强通过Jquery获取的对象的…

java计算机毕业设计ssm学生宿舍管理系统efyug(附源码、数据库)

java计算机毕业设计ssm学生宿舍管理系统efyug(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…