分享

git stash

 灬木木的花灬 2015-09-22

 开发人员常常遇到这种情况:花了几天时间一直在做一个新功能,已经改了差不多十几个文件,突然有一个bug需要紧急解决,然后给一个build测试组。在Git问世之前基本上靠手动备份,费时且容易出错。

git stash命令简而言之就是帮助开发人员暂时搁置当前已做的改动,倒退到改动前的状态,进行其他的必要操作(比如发布,或者解决一个bug,或者branch,等等),之后还可以重新载入之前搁置的改动,很cool吧?

首先,用git add把所有的改动加到staging area。

git add .

接着用git stash把这些改动搁置。

git stash

到这里,当前工作平台就回复到改动之前了。该干嘛干嘛,此处省略1万字。

需要找回之前搁置的改动继续先前的工作了?

git stash apply 即可。

也可以用 git stash list 来查看所有的搁置版本(可能搁置了很多次,最好不要这样,容易搞混)

在出现一个搁置栈的情况下,比如如果你想找回栈中的第2个,可以用 git stash apply stash@{1}

如果想找回第1个,可以用 git stash pop

如果想删除一个stash,git stash drop <id>

删除所有stash,git stash clear


转载二:

我第一次用这个命令时被坑过,经过是这样的:我发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时我想到了git stash,于是那一天我执行了下这个命令就回去睡觉了。 第二天我继续在这个目录里工作,coding了半天才发现前一天的修改都不见了,暂存区里也没有任何昨天修改的纪录。是我忘了保存了吗?

相信git老手们早就看出问题所在了,修改消失了并不是因为我忘了保存,而是git stash在保存完当前工作目录和暂存区以后,会用HEAD重置这两者。因为我昨天的修改没有提交,HEAD指向的是前天的版本,所以stash以后工作目录和暂存区就会被前天的的版本所重置。

正确的做法应该是在git stash后再执行git stash apply,当前的工作目录就恢复回来了。

git stash apply相当于利用过去贮藏(stashed)的工作目录快照,恢复当前的工作目录。如果工作目录在贮藏之后发生了变化,恢复时就会产生冲突(conflict),这种情况下git stash apply会对工作目录进行merge操作。

和merge一样,git stash apply之前要保持当前目录是干净的(没有未提交的改变),否则会保错:

error: Your local changes to the following files would be overwritten by merge: Please, commit your changes or stash them before you can merge.

git stash apply只能恢复工作目录,如果想把暂存区也按照贮藏时的暂存区恢复的话,可以加上--index,如果暂存区恢复时发生冲突了会怎么办呢?嘿嘿,它会直接报错不允许你这么做:


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多