Git - stash

最近忙着做毕设,时间有些紧张,但我也尽力保持周更的状态,所以先写一些简单的东西。
今天找相关资料的发现一个有趣的博客,整理了各个阶段 Git 学习资料,链接我附到文末,只不过里面的一些链接需要翻墙。博客里有句话我觉着挺有趣,对初学 Git 的我们也是一剂强有力的定心丸,也作为这次博客的开题吧:

记住以下几点会让你晚上睡得更香:

1.Git基本上不删除数据。即使是那些看起来是删除数据的操作,实际上是为了让你更快的撤销删除,而在向系统添加数据。

2.Git基本可以撤销所有操作。我鼓励你更多的实验和探索你的想法,因为这就是使用版本控制系统系统的最主要的好处之一。

3.你团队的每一个成员都在他/她的计算机中有各自的副本。本质上这更像是整个版本控制项目中的冗余备份(包括包括整个历史纪录),你捅了大娄子而且还没办法还原这种情况是极其少见的

好了,接下来进入正题,先上定义:

定义:git-stash - Stash the changes in a dirty working directory away

Use git stash when you want to record the current state of the working
   directory and the index, but want to go back to a clean working
   directory. The command saves your local modifications away and reverts

应用场景:在开放过程中,当我们维护多个分支的时候,我们经常需要检入检出(checkout ,一般也用于放弃之前所做的变动),那么就存在一个问题:假设你在当前分支 master 里面正在做一些变动,因为紧急状况需要到 dev 分支里做一些事情,一般进行 checkout 的时候需要一个干净的当前分支,那么我们需要先 commit 一下然后检出。不仅仅是麻烦,这样做还会产生很多的垃圾历史,如果之后出现装状况需要 reset ,那么面对这么多垃圾提交肯定不知所措;或者当你在开发的时候,发现远程仓库有了更新而且和自己有关,需要 pull,如果不进行暂存很可能会发生冲突,此时也可以用 stash 保存状态然后拉取。

说了这么多,实际操作一下。当前的目录是这样的:
这里写图片描述
然后添加 commit5 ,并且做一些修改
这里写图片描述
然后检出分支到 dev
这里写图片描述
这里说明一下,从图中发现检出的时候多了一行,这种操作是很危险的,在用像 sourcetree 这样的图形版本控制工具的时候,会有提示类似这样
这里写图片描述
你可以勾选放弃变更回到未编辑的状态,这也是常用的做法,如果强行检出,那么在 dev 分支所做的更改和 master 的更改将混在一起,之后提交的时候很容易造成污染。所以我们 stash 一下

$git stash save "stash commit5"

这里写图片描述

会看到工作目录里 commit5 消失了,Git 也会有提示:HEAD is now at ece7fd3 delete,意思是将头部指针指向之前的一次 commit 即ece7fd3 ,这个commit 的信息是 delete。
(一般情况下直接执行$git stash也是可以的,只不过 stash 信息默认为上次 commit 的信息)。接着执行 pop:

$git stash pop

这里写图片描述
其实弹出暂存状态有两种方法分别为 pop 和 apply ,其中

$git stash pop stash@{id}

命令会在执行后将对应的stash id 从stash list里删除,而

$git stash apply stash@{id}

命令则会继续保存stash id。相当于 pop 命令执行了 apply + drop,这样会让 stash 显得更加干净。

Warning:$git stash save 命令有个可选参数 -a ,意即为 –all ,是不仅仅把新加入的代码文件放入暂存区,还会把用.gitignore忽略的文件放入暂存区。如果想不影响被忽略的文件,那就要用-u,表示untracked files。

参考链接:
http://blog.jobbole.com/50603/
http://blog.csdn.net/longxiaowu/article/details/26815433

http://www.07net01.com/2015/12/1045400.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值