stash —— 一个极度实用的Git操作
今天要介绍的 Git 操作就是 stash,毫不夸张地说,每个用 Git 的开发人员都一定要会懂怎么使用。
在介绍之前,不知道你有没有和我一样的经历:某一天,我正在一个 feature 分支上高高兴兴地写着(ba)代(a)码(ge)。突然线上环境报错了,是我负责的部分,此时当然是救火要紧哈,准备停下手中的工作准备切 master 分支 checkout 个 hotfix 分支出来。
脑袋正闪出这个想法的时候,咦,发现有点不对劲了 —— 此时我的 feature 分支功能还没做完,comment 上去没意义呀!将修改全部删掉更是不可能,这辈子都是不可能的,那这要怎么办呢?
如果这时能把这个 feature 分支中,还没写好的代码找个地方先藏起来,等到要用的时候再拿出去就完美了。
好了,今天要介绍的主角就能实现我们的需求。我们来看下 stash 这个功能到底是怎么使用的。
假如我现在的代码是这样的:
public static void main(String[] args) {
System.out.println("我是 feature 分支原有的代码");
// ...
System.out.println("我是正在开发的代码");
}
接着上面的情景,我需要把正在开发的代码给藏起来,那么直接使用 git stash 命令即可,使用后就会变成这样的效果:
public static void main(String[] args) {
System.out.println(我是 feature 分支原有的代码");
// ...
}
好了,正在 feature 分支还没写完的代码已经被藏起来了,此时,好奇心满满的你想着,它是被藏到哪里去呢?一顿谷歌之后,你发现可以通过这个命令查看 git stash list,如图:
图中的 stash@(0) 就是被藏起来的记录了,知道真相的你这下可以放心地去处理线上问题了。
你很牛皮,线上问题没一会功夫就搞定了,此时你再次切回刚才的 feature 分支,想要把刚才藏起来的代码拿出来。好了,一顿谷歌之后,你发现有两种拿的方法,分别是:
1、git stash pop
2、git stash apply
那这两者有什么不同呢?还记得刚才提交到 git stash list 命令显示的结果吗?—— stash@(0)
git stash pop 的是恢复刚才被藏起来的代码,同时删除 stash@(0) 这条记录也删了,此时你再使用 git stash list 命令就没有结果了:
明白 git stash pop 的作用后,那 git stash apply 命令也很好理解了,它们唯一的不同就是 git stash apply 命令不会删除stash@(0) 这条记录。
最后,如果你在一个分支上使用了 n 次 git stash 命令,那么就会有 stash@(0)、stash@(1)、...、stash@(n),对应一共有 n 条记录。
那我们要这么多条记录有什么用呢?
答案就是我们可以指定 git stash pop/apply 哪条记录。假如我想要恢复 stash@(1) 记录。那么对应的命令是 git stash pop stash@(1) 或 git stash apply stash@(1)
OK,以上就是全部内容了,希望对你有帮助。
PS:前几天我被极客时间的 Git 教程刷屏。坦白讲,Git 的确是一项必备技能。除了极客时间的教程之外,我也非常推荐廖雪峰老师的 Git 教程,链接如下:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
stash —— 一个极度实用的Git操作的更多相关文章
- webstorm的git操作使用
0. 前言 在上一篇文章中,讲述了使用webstorm去调试node程序,最近研究了一下如何使用webstorm去操作git. 对于git的使用,大家的使用方式均有不同,最王道的方式非命令行莫属,基于 ...
- Git操作 :从一个分支cherry-pick多个commit到其他分支
在branch1开发,进行多个提交,这时切换到branch2,想把之前branch1分支提交的commit都[复制]过来,怎么办? 首先切换到branch1分支,然后查看提交历史记录,也可以用sour ...
- git 操作大全
Git 以下内容整理自廖雪峰的git教程,主要用于个人方便使用git命令 git忽略已经被纳入版本库的文件 使用 git update-index –-skip-worktree [file] 可以实 ...
- Intellij 中的git操作 转!
http://blog.csdn.net/lovesummerforever/article/details/50032937 Git原理以后会分章节介绍,本次主要说一下intellij怎样操作git ...
- git操作(强烈推荐)
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- git操作的各种命令整理
1.常用的Git命令 命令 简要说明 git add 添加至暂存区 git add–interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 git ann ...
- 转 git操作小结
UNDER MIT LICENSE. 公司几乎所有的项目都是使用 git 仓库来管理代码,以前对 git 只有些肤浅的了解,每次提交代码或者上线的时候总是会提心吊胆,生怕出现一些未知的问题.经过三个月 ...
- 常用Git操作
--------------------git-------------------- 1.简介 1.Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.[1] ...
- 实用:Git 中的一些常见错误
无论是数据科学家.算法工程师还是普通开发人员,在每个团队协作开发任务中,Git 都是必不可少的版本控制工具,因此掌握它的基本操作十分有必要.但即便是教程满天飞的今天,开发人员在使用 Git 时也还是会 ...
随机推荐
- mac os 利用ssh 搭建git server服务器详细教程,以及git基本用法
详细讲mac 连接mac的git操作 首先在服务端上 第一:新建一个仓库 1, cd /Users/userName/projects 用linux命令进入一个你想要创建与他人共享的文件夹. 2,su ...
- 搭建golang开发环境(1.14之后版本)
Go语言1.14版本之后推荐使用go modules管理依赖,也不再需要把代码写在GOPATH目录下. 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐) ...
- LeetCode随缘刷题之字符串转换整数
package leetcode.day_01_29; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 请你 ...
- 『无为则无心』Python面向对象 — 45、面向对象编程
目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...
- 力扣算法经典第一题——两数之和(Java两种方式实现)
一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...
- 【转】可见性、原子性和有序性问题:并发编程Bug的源头
如果你细心观察的话,你会发现,不管是哪一门编程语言,并发类的知识都是在高级篇里.换句话说,这块知识点其实对于程序员来说,是比较进阶的知识.我自己这么多年学习过来,也确实觉得并发是比较难的,因为它会涉及 ...
- 使用PostMan Canary测试受Identity Server 4保护的Web Api
在<Asp.Net Core: Swagger 与 Identity Server 4>一文中介绍了如何生成受保护的Web Api的Swagger文档,本文介绍使用PostMan Cana ...
- Remix本地化,加载本地合约文件,本地链接Remix
智能合约IDE,在线的比较卡,而且切换网络面临文件丢失的风险,选择本地搭建Solidity本地编辑环境,Remix-IDE + Remixd组合,加载本地合约代码.这里用到两个工具: Remix ID ...
- BI报表系统该如何集成到其他系统呢?
近期小麦我经常收到很多用户的反馈,想知道Smartbi的报表能不能从微信/钉钉之类的直接跳转到已做好的报表页面?他们都希望通过这种方式尽可能地避免由于各个管理软件账号密码不同而造成的不便,能够在日常工 ...
- C语言memcpy()函数和memmove()函数
C语言memcpy()函数和memmove()函数 关于 memcpy() 函数,请先看链接. memcpy() 函数和 memmove() 函数的函数原型如下: void* memcpy(void ...