应用场景:

1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
2 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。

命令详解:

1 git stash

能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。

$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   src/main/java/com/wy/CacheTest.javamodified:   src/main/java/com/wy/StringTest.javano changes added to commit (use "git add" and/or "git commit -a")$ git stash
Saved working directory and index state WIP on master: b2f489c second$ git status
On branch master
nothing to commit, working tree clean

2 git stash save

作用等同于git stash,区别是可以加一些注释,如下:
git stash的效果:

stash@{0}: WIP on master: b2f489c second

git stash save “test1”的效果:

stash@{0}: On master: test1

3 git stash list

查看当前stash中的内容

4 git stash pop

将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。
注:该命令将堆栈中最近保存的内容删除(栈是先进后出)
顺序执行git stash save “test1”和git stash save “test2”命令,效果如下:

$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1$ git stash pop
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   src/main/java/com/wy/StringTest.javano changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (afc530377eacd4e80552d7ab1dad7234edf0145d)$ git stash list
stash@{0}: On master: test1

可见,test2的stash是首先pop出来的。
如果从stash中恢复的内容和当前目录中的内容发生了冲突,也就是说,恢复的内容和当前目录修改了同一行的数据,那么会提示报错,需要解决冲突,可以通过创建新的分支来解决冲突。

5 git stash apply

将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况。

$ git stash apply
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   src/main/java/com/wy/StringTest.javano changes added to commit (use "git add" and/or "git commit -a")$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1

堆栈中的内容并没有删除。
可以使用git stash apply + stash名字(如stash@{1})指定恢复哪个stash到当前的工作目录。

6 git stash drop + 名称

从堆栈中移除某个指定的stash

7 git stash clear

清除堆栈中的所有 内容

8 git stash show

查看堆栈中最新保存的stash和当前目录的差异。

$ git stash showsrc/main/java/com/wy/StringTest.java | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)

git stash show stash@{1}查看指定的stash和当前目录差异。
通过 git stash show -p 查看详细的不同:

$ git stash show -p
diff --git a/src/main/java/com/wy/CacheTest.java b/src/main/java/com/wy/CacheTest.java
index 6e90837..de0e47b 100644
--- a/src/main/java/com/wy/CacheTest.java
+++ b/src/main/java/com/wy/CacheTest.java
@@ -7,6 +7,6 @@ package com.wy;*/public class CacheTest {public static void main(String[] args) {
-        System.out.println("git stash test");
+        System.out.println("git stash test1");}}
diff --git a/src/main/java/com/wy/StringTest.java b/src/main/java/com/wy/StringTest.java
index a7e146c..711d63f 100644
--- a/src/main/java/com/wy/StringTest.java
+++ b/src/main/java/com/wy/StringTest.java
@@ -12,7 +12,7 @@ public class StringTest {@Testpublic void test1() {
-        System.out.println("=================");
+        System.out.println("git stash test1");System.out.println(Strings.isNullOrEmpty(""));//trueSystem.out.println(Strings.isNullOrEmpty(" "));//falseSystem.out.println(Strings.nullToEmpty(null));//""

同样,通过git stash show stash@{1} -p查看指定的stash的差异内容。

9 git stash branch

从最新的stash创建分支。
应用场景:当储藏了部分工作,暂时不去理会,继续在当前分支进行开发,后续想将stash中的内容恢复到当前工作目录时,如果是针对同一个文件的修改(即便不是同行数据),那么可能会发生冲突,恢复失败,这里通过创建新的分支来解决。可以用于解决stash中的内容和当前目录的内容发生冲突的情景。
发生冲突时,需手动解决冲突。

git stash详解相关推荐

  1. Git 原理详解及实用指南

    Git 原理详解及实用指南 什么是版本控制系统(VCS) 很多人认为 Git 难以理解的第一个门槛在于:所谓的「Git 是一个分布式版本控制系统」这句话的具体含义不够清楚.其实分布式版本控制系统(Di ...

  2. git cherry-pick 详解 —— Git 学习笔记 18

    git cherry-pick 详解 初识 git cherry-pick(拣选) 拣选会提取某次提交的补丁,之后尝试将其重新应用到当前分支上. 这种方式在你只想引入特性分支中的某个提交时很有用. 假 ...

  3. git 原理详解及实用指南_如何编写良好的提交消息:实用的Git指南

    git 原理详解及实用指南 To create a useful revision history, teams should first agree on a commit message conv ...

  4. GitHub使用教程详解(下)——Git的安装以及Git命令详解

    上一篇GitHub使用教程详解(上)--官网操作指南[翻译],是针对官网的guide进行了翻译,其实个人来说,我是很不喜欢那么操作的,又要等待页面加载,操作又慢!程序员嘛,还是直接敲入命令代码更迅速高 ...

  5. git命令详解( 四 )

    此篇为git命令详解的第四篇,话不多说,我们直接上知识点好吧 git Push 偏离的工作 gitPush: 此命令负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录.一旦 git ...

  6. git amend详解和撤销

    git amend 详解和撤销 git amend详解 git amend 作用 git amend如何撤销 git amend详解 git amend 作用 git 在现在的开发中使用频繁,解决了很 ...

  7. java开发中常用的Git命令详解

    java开发中常用的Git命令详解(IDEA内如何操作) 一:写这篇文章的目的是什么? 二:使用场景在哪里? 1:当我们要使用idea去git仓库拉代码时,首先我们的idea得配置git工具 2:项目 ...

  8. Git 储藏(stash)详解

    文章目录 单次储藏及应用 多次储藏及应用 对特定范围文件进行储藏 此文在阅读前需要有一定的git命令基础,若基础尚未掌握,建议先阅读这篇文章Git命令播报详版 在平常的工作中,当我们在单独拉取的功能分 ...

  9. git原理详解与实操指南_全网最精:学git一套就够了,从入门到原理深度剖析

    以上资源收集至互联网 如有侵权请联系删除 资源获取方式 扫码关注资源库公众号 回复密码'20190812' 即可获得 截图展示 课程信息 课程难度:中级 学习人数:148352 课程状态:已完结 时长 ...

最新文章

  1. 程序员过年被亲戚鄙视:月薪1万5很一般,在大城市很难养活自己吧?
  2. 谷歌大改Transformer注意力,速度、内存利用率都提上去了
  3. 【线下首场免费报名啦】阿里云2020云内存数据库峰会 年度开发者的盛宴
  4. 2019.03.18 连接my sql
  5. ubuntupython连接数据库_Ubuntu中python的mysql操作
  6. powershell / ps脚本ps1中.exe(可执行文件)没反应
  7. 共享库方案解决WAS中JAR包冲突
  8. unity3D-下载安装指南
  9. 人工智能与商业智能,区别、定位与联系
  10. Office2016装Mathtype找不到WLL
  11. [深度学习]动手学深度学习笔记-11
  12. 新开业和新签约酒店 | 上海世茂皇家艾美酒店开业;福州滨海新城那迪广场、Casa Cook桂山岛度假酒店等顺利签约...
  13. linux6.9 fc cache,(转载, 已看)fc-cache出错解决办法.
  14. Ubuntu 录制视频并制作成gif图
  15. 一切都结束了。OI退役感言。
  16. 基于微信小程序的二手交易论文和答辩ppt
  17. Cocos2d-X 论文转载
  18. Python的列表与操作
  19. C语言实验指导(三)C语言AD连续采集数据实验
  20. Surface RT应用技巧1

热门文章

  1. Matlab 读出图片后保存大小改变
  2. 揭秘「星巴克」会员成长体系,打造你的超级用户
  3. 用python每天自动给你女朋友说晚安
  4. 计算机网络:数据链路层设备 网桥与交换机
  5. 媒体定律:马航失联客机取代昆明袭击
  6. 图像的几何变换(matlab)
  7. goldengate mysql双向_GoldenGate配置(二)之双向复制配置
  8. matlab - patch 画渐变色的曲线图
  9. 微信小程序 购物车操作
  10. 华为畅享20pro和华为nova7se的区别 哪个好