工作除了开发最新的版本之外还要对原来的版本做例行的维护,修修补补。于是有了在两个分支之间游走切换的问题,最新改版的代码在分支 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. 第13月第12天 Constraints priority

    1.Constraints priority 将evInputView的高度约束的priority设为750,evInputView的inputTextView如果不设高度约束,那么高度就是defau ...

  2. SocketServer源码学习补充

    在前两个文章中整理了关于BaseServer部分以及BaseRequestHandler,以及通过对TCP的处理的流程的整理,这次整理的是剩下的关于用于扩展的部分,这里通过对线程扩展进行整理 Thre ...

  3. elasticsearch安装servicewrapper插件

    1)下载elasticsearch-servicewrappergit clone https://github.com/elasticsearch/elasticsearch-servicewrap ...

  4. nginx + php + centos 6.3

    2014年2月7日 22:34:52 PHP 5.5.9 http://cn2.php.net/distributions/php-5.5.9.tar.bz2 nginx 1.5.10 http:// ...

  5. CentOS 5.x 键盘布局改为日语

    CentOS 5.x 直接在系统设置界面修改键盘布局,可能不起作用,需要按如下步骤修改配置文件. 1. /etc/sysconfig/keyboard KEYTABLE="jp106&quo ...

  6. 打开文件或者uri的方式--------进程启动文件和启动者启动文件

    The  Process class in  System.Diagnostics allows you to launch a new process.For security reasons, t ...

  7. Linux 生产实习01

    Linux 生产实习01 标签(空格分隔): Linux 2018.07.02 相关软件下载地址:Linux Study 0x01. 安装 VMware Workstation VMware Work ...

  8. HDR 视频编码

    前转换以及后转换:-f xxx.cfg (以及注意工作目录以及路径名/和//) HEVC视频编码:-c xxx.cfg  -c xx.cfg(视频的配置文件)

  9. 微信WeixinJSBridge的接口使用

    以下都要包含weixinApi.js(见底部git里的js文件) 1).分享 WeixinApi.ready(function(Api) { // 微信分享的数据 var wxData = { &qu ...

  10. linux shell 脚本攻略学习12--文件权限详解,chmod命令详解,chown命令详解,chattr命令详解

    文件权限详解 一.chmod命令详解 文件权限和所有权是Unix/Linux文件系统最显著的特征之一.linux中的每一个文件都与多种权限类型相关联,在这些权限中主要分类为3种: 用户(User)是文 ...