文档章节

git-stash 用法小结

FalconChen
 FalconChen
发布于 01/23 14:58
字数 1209
阅读 338
收藏 0

3 月,跳不动了?>>>

  • 发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑git stash。
  • 使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。
  • 经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

 

需要说明一点,stash是本地的,不会通过git push命令上传到git server上。

一. stash当前修改

$ git stash
Saved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepage

实际应用中推荐给每个stash加一个message,用于记录版本

$ git stash save "test-cmd-stash"
Saved working directory and index state On autoswitch: test-cmd-stash
HEAD 现在位于 296e8d4 remove unnecessary postion reset in onResume function
$ git stash list
stash@{0}: On autoswitch: test-cmd-stash

二. 重新应用缓存的stash

1、将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下
$ git stash pop
2、可以使用git stash apply命令,将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝
$ git stash apply

可以使用名字指定使用哪个stash,默认使用最近的stash(即stash@{0})

3、 查看现有stash
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
4、 移除stash
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
$ git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)
5、 查看指定stash的diff

可以使用git stash show命令,后面可以跟着stash名字。示例如下:

$ git stash show
 index.html | 1 +
 style.css | 3 +++
 2 files changed, 4 insertions(+)
在该命令后面添加-p或--patch可以查看特定stash的全部diff,如下:

$ git stash show -p
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..d92368b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,3 @@
+* {
+  text-decoration: blink;
+}
diff --git a/index.html b/index.html
index 9daeafb..ebdcbd2 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
+<link rel="stylesheet" href="style.css"/>
6、 从stash创建分支
$ git stash branch testchanges
Switched to a new branch "testchanges"
# On branch testchanges
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   index.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   lib/simplegit.rb
#
Dropped refs/stash@{0} (f0dfc4d5dc332d1cee34a634182e168c4efc3359)

该命令会用stash中的修改创建一个新的分支,创建成功后会删除此stash

7、 暂存未跟踪或忽略的文件

默认情况下,git stash会缓存下列文件:

添加到暂存区的修改(staged changes)
Git跟踪的但并未添加到暂存区的修改(unstaged changes)
但不会缓存一下文件:

在工作目录中新的文件(untracked files)
被忽略的文件(ignored files)

git stash命令提供了参数用于缓存上面两种类型的文件。使用-u或者--include-untracked可以stash untracked文件。使用-a或者--all命令可以stash当前目录下的所有修改。


参考:git-stash用法小结

© 著作权归作者所有

FalconChen
粉丝 141
博文 168
码字总数 87811
作品 0
深圳
高级程序员
私信 提问
加载中

评论(0)

git stash与git rebase

git stash 先看命令行 git stash - -help的帮主页面 也就是储藏你在当前工作的一些代码,状态。比如我在工作中常用的。 每次从远程拉代码的时候,拉完代码之后需要在本地将本地的一些配置应用...

avery1
2018/06/11
0
0
解决因为本地代码和远程代码冲突,导致git pull无法拉取远程代码的问题

一、问题   当本地代码和远程代码有冲突的时候,执行git pull操作的时候,会提示有冲突,然后直接终止本次pull,查了些资料没有找到强制pull的方式,但是可以使用如下方式解决。 二、解决思...

陈小龙哈
2018/06/26
0
0
(转)Git Stash用法,方便临时处理bug时随时切换分支而不丢失修改

最近在使用Git管理项目工程的时候,遇到了很多问题,也学习到了很多关于Git常见使用的技巧,下面就其中关于Git Stash的用法和大家分享下。 首先,简单介绍下Git Stash命令的用法,详细的用法...

番薯丸子
2016/10/20
38
0
git-cleanup-workspace

很多时候需要为自己的工作目录清理一下,比如,常见的有恢复当前版本到HEAD,保存当前的工作,check out出来另一个分支做开发,下面介绍几个我自己常用的方法。 保存当前的工作,checkout出来...

pengfei_xue
2014/01/09
1.5K
0
【GIT-3】GIT 的基础教程 分支管理 fixbug分支 Featur 冲突处理 标签管理 操作

【转载请注明出处!http://my.oschina.net/u/2337744/】 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。 如果两个平行宇宙互...

程序媛_Mickey
2016/03/09
162
1

没有更多内容

加载失败,请刷新页面

加载更多

华为P40发布:搭载HMS硬刚谷歌,未涨价抢全球高端机市场

  文连线 Insight,作者向阳,编辑水笙   3 月 26 日晚,华为消费者业务 CEO 余承东登上台,以熟悉的英文口音开启了华为发布会,他说,“这就是我们的 P40 系列。”   以往华为P系列通...

水果黄瓜
6分钟前
8
0
如何从Java中的字符串值获取枚举值? - How to get an enum value from a string value in Java?

问题: Say I have an enum which is just 说我有一个枚举 public enum Blah { A, B, C, D} and I would like to find the enum value of a string, for example "A" which would be B......

javail
29分钟前
5
0
2048游戏的最佳算法是什么? - What is the optimal algorithm for the game 2048?

问题: I have recently stumbled upon the game 2048 . 我最近偶然发现了2048游戏。 You merge similar tiles by moving them in any of the four directions to make "bigger" tiles. 您可......

技术盛宴
59分钟前
7
0
OSChina 周一乱弹 —— 小姐姐,这tm不是犬耳娘吗!你认错了吧

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《Drip Drip Drip》- 音乐治疗 手机党少年们想听歌,请使劲儿戳(这里) @-Eric- ...

小小编辑
今天
34
0
HTML5 小游戏开发

HTML的基础 HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成...

冯六六
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部