点击上方蓝字,关注并星标,和我一起学技术。

大家好,今天的文章我们来介绍git当中一个非常常用的功能——储藏

大家在协同开发的时候应该都有这样的经历,有的时候我们的功能开发了一半,因为某些原因我们想要checkout到其他的分支上查看代码或者是执行某个工作。但是如果我们直接执行checkout,git会禁止我们的行为。

我拿本地的项目举个例子,可以看到当我们执行了checkout命令之后,git提示我们在一些文件的改动会被覆盖,所以拒绝了我们的checkout命令。

image-20201023084358700

这个时候应该怎么办呢?最好的办法当然是使用git commit把改动提交了。但问题是有的时候我们不想提交一些代码,比如还没有经过严谨的测试,或者是我们临时开发的一些测试功能等等。在这种情况下commit也是不合适的,即使提交了了,之后在push之前也会要把commit撤销了。但如果一不小心忘记了,可能就会造成悲剧。

针对这个问题,git提供了一个解决策略就是stash功能。

储藏改动

git stash可以将本地还没有提交的改动全部存储起来。接着,我们在之前的某一篇文章当中加上一行-test stash。

我们执行一下git diff,可以看到这行改动。


接着我们执行git stash,会发现我们的git目录又回到了没有改动的状态。再执行git diff也看不到任何改动了。


这是因为git把我们本地还没有提交的改动都暂存了起来,这样方便我们进行checkout或者是其他一些操作,而不会起冲突或者是其他的影响。

应用改动

那么当我们操作完成之后,想要还原刚才暂存起来的内容,这个时候应该怎么办呢?

也有办法,我们只需要使用git stash apply或者是git stash pop这两个命令就可以将刚才暂存起来的内容还原了。但是这里有一个问题,就是stash apply和pop之间是不同的。

这里涉及到stash内部的实现机制,stash内部其实是通过堆栈实现的。pop对于堆栈而言很明确,就是弹出的意思。也就是说如果我们使用的是pop,那么当我们pop之后,这条记录会在堆栈当中删除。而如果使用的是apply呢,记录不会从堆栈当中删除,仍然会保留下来。

一般情况下我使用pop多一些,但是pop也有缺点,比如pop没有办法选择应用的记录。我们可以使用git stash list来查看一下当前堆栈当中已经有的记录。


如果我们使用git stash pop的话,默认的是应用的栈顶的记录,也就是stash@{0}。但如果我们使用stash apply的话,我们可以自由选择我们想要应用的记录。比如如果我们想要应用最后一条记录的话,我们可以这样:

git stash apply stash@{2}

关于应用储存的修改也有一些细节,首先是储藏和修改对应的分支可以不同。我们可以在一个分支储藏,之后切换到另外一个分支进行应用。并且如果我们在应用之前修改了同样的内容的话,也会引起合并冲突。

另外就是当我们应用储藏的时候,会发现我们之前add过的文件又重新回到了未暂存的状态。如果我们想要重新回到文件被暂存的状态时,我们可以使用index选项来执行。

git stash apply --index

对于我们已经不想要的储藏记录,我们可以执行git stash drop来进行删除。

其他技巧

除了上述的功能之外,git stash还有一些其他的用法。

比如--keep-index选项,在不加这个选项的时候,当我们使用git stash,它会把所有没有commit的内容全部stash。但是有的时候我们不希望这样,我们希望它只暂存我们没有add到暂存区的内容。这个时候我们就可以通过这个参数实现。

另外一个参数是-u或者是--include-untracked,我们从这个名字上也看得出来。它们的意思是在stash的时候将新创建并且还没有被git管理的文件也一并储藏起来。

除此之外,还有--patch的功能也很常用。patch我们曾经在上篇文章讲解交互式命令的时候讲到过,它可以将git针对的改动缩小到代码而不是文件级别。交互式地和我们操作哪些代码层面的改动需要存储起来,操作方法和上篇文章介绍的一样。大家如果有所遗忘可以在文末找到上一篇的文章进行回顾。


最后一个功能是从储藏上新建一个分支,有的时候我们先储存了代码之后又继续进行了一些工作。这个时候如果我们再恢复从前的改动则会引起冲突。这个时候我们可以运行git stash branch新建一个新的分支,在这个分支上应用我们的提交。

git stash branch applystash

应用成功之后Git会自动抛弃掉对应的stash记录,非常方便,不过我个人没有用过,因为实际工作当中没有遇到这么复杂的情况。

今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、在看、转发)

- END -

git 查看pop内容_原创 | 有了Git这个操作,我再也不怕代码混乱了!相关推荐

  1. git stash pop冲突_这有一份 git 日常使用清单,你需要吗?

    点击上方"前端教程",选择"星标" 每天前端开发干货第一时间送达! 作者:echozh juejin.im/post/5d5b4c6951882569eb570 ...

  2. git 查看文件内容

    $ cat file_name.format 上面的命令可直接在 git 命令框中输入 用于查看 文件内容 可以是 已经add文件/未add文件 也 可以是 提交/未提交 的文件 用法 : $ cat ...

  3. git git 查看远程库_如何从Git远程存储库中提取

    git git 查看远程库 Note: This the fourth video in the Git for beginners series. Watch the first video her ...

  4. git 强制更新远程_版本控制管理工具git的常见指令合集

    今天小千就来给大家介绍一下git中比较常见的指令合集,方便大家使用git,建议收藏起来方便日后查阅. 一.常见的命令 git help <command> # 显示command的help ...

  5. git 修改分支名字_大牛总结的 Git 使用技巧,写得太好了!

    作者:你喜欢吃青椒么来源:juejin.im/post/5d157bf3f265da1bcc1954e6 前言 本文是参考廖雪峰老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程,作下 ...

  6. git add后取消_满满干货!——Git知识总结

    git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 下面就详细的介绍一下git: 本地库 通过命令 git init 把这个目录变成git可以管理的仓库 git ...

  7. git add 文件夹_软件测试学习资源—Git 基础使用

    环境准备: 操作系统: Win7 旗舰版 64位 Git:自官网下载2.22 Windows版本,默认安装 任意位置新建一个空白文件夹:d:/B03_Git 在该文件夹中点击鼠标右键,选择" ...

  8. git 查看分支编码_12个常用的Git命令,赶紧记一波!

    今天齐姐简单讲下 Git 的实现原理,知其所以然才能知其然:并且梳理了日常最常用的 12 个命令,分为三大类分享给你. 本文的结构如下: 作者和开发原由 Git 的数据模型 常用命令 资源推荐 作者和 ...

  9. git ssh拉取代码_阿里云搭建git服务器

    一.搭建步骤,分为两步 搭建中心仓库 自动同步代码到站点目录 二.详细步骤如下 1.先检查一下服务器上有没有安装git git --version 如果出现版本号,说明服务器已经安装git,如图所示: ...

最新文章

  1. CentOS7.4下 VNC Server的搭建和客户端的连接配置
  2. linux 命令 kps,10个LINUX命令 超好用
  3. 手动配置mysql_手动配置Mysql,无需安装的方法以及Mysql的一些基本命令
  4. servlet中显示mysql字段_Java Servlet:从数据库获取信息并在屏幕上显示它
  5. 万字图解Java多线程,不信你学不会!
  6. GuaiGuai ---- 1
  7. 显卡硬解4k测试软件,对飙4K硬解 看谁才是笑到最后的大佬
  8. 计算机制图大赛,制图大赛简介
  9. plc中int数据类型范围_AB的PLC中,这些数据类型:INT、DINT、SINT、REAL和BOOL,分别代表什么意思?...
  10. Oracle OMF参数
  11. 人工智能全栈学习路线之人工智能概览(百度云智学院学习笔记)
  12. 免费使用腾讯云每天定时签到京东领取京豆
  13. raid卡缓存对硬盘性能_1000倍可靠性,专为高端NAS而生 西部数据SA500 RED SSD固态硬盘首发评测...
  14. SSH Tunnel隧道详解
  15. MATLAB【数字图像处理】 实验五:形态学图像处理
  16. maven settings.xml文件
  17. 凡泰极客「开放银行」主题私享会圆满落地
  18. 关键词卡首屏接口、关键词卡首屏原理讲解、关键词卡首屏提高权重
  19. 中水处理设备:工业中水回用设备技术应用
  20. 寒武纪加速平台(MLU200系列) 摸鱼指南(二)--- 模型移植-环境搭建

热门文章

  1. 文艺小清新手绘秋季秋天叶片,值得设计师收藏的好素材
  2. 电商促销插画风PSD分层模板,直击底价!吸睛容情!
  3. UI设计素材专辑|轻松解决键配色方案
  4. UI设计素材|字体的重要性
  5. UI设计干货模板|输入框设计临摹素材
  6. 剪板机自动上下料_全自动上下料机械手系统的优势
  7. flask post json_Flask 和 requests 搭建一个简单的API服务
  8. Python字符串函数说明(菜鸟教程里面的)
  9. zlib-1.2.11手册
  10. python画平面直角坐标系_Python 数据可视化:重新认识坐标系