工作除了开发最新的版本之外还要对原来的版本做例行的维护,修修补补。于是有了在两个分支之间游走切换的问题,最新改版的代码在分支 new 上,旧版本的代码在分支 old 上,我在 new 上开发了一半,忽然有人给了我一个改进的需求,于是我要切换回 old 去修改代码。在这个场景下,我摸索了三种方法:

及时 commit 代码

在 new 分支上把已经开发完成的部分代码 commit 掉,不 push,然后切换到 old 分支修改代码,做完了commit,所有分支互不影响,这是一个理想的方法。

使用 git stash

有时候写了一半的 Golang 代码,都还不能编译通过的,就被叫去改另一个分支的 bug 了。

在 new 分支上的时候在命令行输入:

git stash

或者

git stash save “修改的信息"

这样以后你的代码就回到自己上一个 commit 了,直接 git stash 的话 git stash 的栈会直接给你一个 hash 值作为版本的说明,如果用 git stash save “修改的信息”,git stash 的栈会把你填写的“修改的信息”作为版本的说明。

接下来你回到 old 分支修改代码完成,你又再回到 new 分支,输入:

git stash pop

或者

git stash list
git stash apply stash@{0}

就可以回到保存的版本了。git stash pop 的作用是将 git stash 栈中最后一个版本取出来,git stash apply stash@{0} 的作用是可以指定栈中的一个版本,通过 git stash list 可以看到所有的版本信息:

stash@{0}: On order-master-bugfix: 22222
stash@{1}: On order-master-bugfix: 22222

然后你可以选择一个你需要的版本执行:

git stash apply stash@{0}

这时候你搁置的代码就回来了。

用 IDE 工具的 shelve 的功能

有一些 IDE 工具提供了 shelve 的功能,shelve 的意思是“将…搁在一边”,即把还没写完的代码先搁在一边。我开发都是使用 jetbrains 公司的 IDEA 和 PhpStorm,它们就提供了 shelve 的功能,方法:

首先在 IDE 的底部找到“Changes”,点开会有 local 的选项卡,选中你要搁置的代码,点击右键,选择“Shelve Changes”,在提交的输入框中输入你的注释,以便回来的时候识别你需要的版本,点击“Shelve Changes”键即可。这时选项卡上会多一个“Shelf”的选项卡,里面就有你搁置的代码。

这时候你可以去 old 分支修改代码,改完了之后回到 new 分支,到“Shelf”选项卡下选择你要恢复的代码或者版本,点击右键选择“Unshelve Changes”,你的搁置的代码就回来了。

参考:

[开源中国] Git 分支管理详解

[廖雪峰] Git 分支管理 - Bug 分支

Git Stash用法,方便临时处理bug时随时切换分支而不丢失修改

Git 修复 bug 切换分支时,如何保存修改过的代码(即如何保存现场)?的更多相关文章

  1. git中如何切换分支,拉取分支,合并分支

    idea中如何使用git来做分支的切换合并: https://blog.csdn.net/autfish/article/details/52513465 本地分支与远程分支: https://seg ...

  2. git命令之切换分支

    Git一般有很多分支,我们clone到本地的一般都是master分支,如何进行分支的切换呢?那么下面带大家简单的看看如何通过命令来切换: 1.查看远程仓库及本地的所有分支 命令:git branch ...

  3. git命令-切换分支

    git一般有很多分支,我们clone到本地的时候一般都是master分支,那么如何切换到其他分支呢? 1. 查看远程分支 $ git branch -a 我在mxnet根目录下运行以上命令: ~/mx ...

  4. Git ---创建和切换分支

    ······································································"天下武功,唯快不破" git分支: g ...

  5. Git拉取代码切换分支

    1.克隆代码 cd d:/GitTest //指定存放的目录 git clone https://git.oschina.net/name/test.git //你的仓库地址 2.查看远程所有分支 g ...

  6. git clone后切换分支,和远端的不一样。

    原因 git clone后再master分支,切换后到了别的分支,分支里面的文件目录是不一样的,导致出现错误. 解决 删除原来的全部文件 git pull 可是git pull报错, git匹配的文件 ...

  7. Git使用包括切换分支

  8. 使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug

    使用Git分支开发新特性或修复Bug 通过分支,可以在不影响原有代码的前提下改变代码,主要用于开发新功能新特性.下 一代产品 为已经发布的正式版修复bug 团队开发时为每个人建立一个分支,从而避免相互 ...

  9. Git 解决合并分支时的冲突

    参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344 创建分支时,新分支的文件内容建立在原分支的基础上,我们称这时 ...

随机推荐

  1. C++ 修饰符类型

    C++ 修饰符类型 C++ 允许在 char.int 和 double 数据类型前放置修饰符.修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求. 下面列出了数据类型修饰符: signed u ...

  2. 在一台win10上启动多个mysql

    1.因为项目需要用一个已经有数据的mysql,而我之前已经安装了一个mysql(之前的mysql上面也是有东西,不想删除)  想办法.... mysqld.exe --defaults-file=D: ...

  3. Java练习之使用StringBuilder

    package string.demo; /* * 将数组变为字符串输出 */ public class StringBuilderTest { /** * @param args */ public ...

  4. 【Python】测试dpkt解析pcap

    1.前言 本想借助dpkt解析mail.dns.http来辅助分析pcap包进行分析,查阅资料学习却发现并不如使用scapy那么方便. dpkt是一个python模块,可以对简单的数据包创建/解析,以 ...

  5. MySql 死锁时的一种解决办法【转】

    转自:http://blog.csdn.net/mchdba/article/details/38313881 之前也遇到一次,今天又遇到了这个问题,所以这次必须解决,网上找到这篇文章帮了大忙,方便以 ...

  6. MySQL多源复制【转】

    什么是多源复制? 首先,我们需要清楚 multi-master 与multi-source 复制不是一样的. Multi-Master 复制通常是环形复制, 你可以在任意主机上将数据复制给其他主机. ...

  7. linux网络编程IO模型

    同步与异步:         同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成.         异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要 ...

  8. Mybatis输入映射和输出映射

    本节内容: 输入参数映射 输出映射 resultMap Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 一.环境准备 复制 ...

  9. Android studio2.3.3升级3.1.2坑

    原文:https://blog.csdn.net/qq_26361871/article/details/80255141 1.grade配置Error: Could not find com.and ...

  10. Angular 个人深究(一)【Angular中的Typescript 装饰器】

    Angular 个人深究[Angular中的Typescript 装饰器] 最近进入一个新的前端项目,为了能够更好地了解Angular框架,想到要研究底层代码. 注:本人前端小白一枚,文章旨在记录自己 ...