Git step by step 11 之 git stash

介绍:
git stash 作用是备份当前“工作目录”的内容,将该备份保存到Git栈中,并从最近的一次提交中读取相关内容,让工作区保持和上次提交的内容一致。 man git stash将其解释为两步,第一步是保存当前工作目录中的内容到一个新的stash,第二步执行 git reset --hard。
git stash pop:从Git栈中读取最近一次保存的内容,恢复工作目录中的相关内容。
git stash list:显示Git栈内的所有备份,进一步利用 git stash pop XXX 读取Git栈内中某一指定的备份。
git stash clear:清空Git栈。
此外还有,git stash drop,git stash save等

适用场合:
使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实[b]如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug[/b],那么使用'git stash'就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用'git stash apply'将以前一半的工作应用回来。也许有的人会说,那我可不可以多次将未提交的代码压入到栈中?答案是可以的。当你多次使用'git stash'命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,'git stash list'命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用'git stash apply stash@{1}'就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用'git stash clear'来将栈清空。

对当前工作目录进行git stash之后,在进行git stash pop的时候,也有可能会像 git merge一样出现冲突。
例如:工作目录中有一test.txt,在master分支下,对test.txt的第一行进行了修改。此时,要先修复另一bug,所以要 git stash。由于修改该bug时,也需要修改test.txt的第一行,这就与git stash之前在test.txt上有了冲突。当进行git stash pop的时候,会提示有冲突,需要手动进行修改。

看上去完全可以利用git branch来代替git stash,但正如前面“适用场合”中说的,利用 git stash 可以减少不必要的记录,使得查看log时,会更省心。
git stash 主要处理未commit时的现场保存,如果已经commit的了,branch更适合一些。
总的来说,git很灵活,正是由于它太灵活,以致于会有一些相互覆盖的功能,例如,若工作目录、暂存区以及本地数据目录中有一文件(其余都相同),在三个区域中内容各不相同,git reset --hard,会将三个区域中的这个文件都与本地数据目录中的这个文件相同,但用git checkout HEAD -- file,也会使三个区域中的文件保持一致。再如,git reset --hard <branch> 与 git checkout <branch> 的作用效果又是一样的。这正是导致一些命令看似相同,不容易让人区分的原因。


more:
[url=http://www.cppblog.com/deercoder/archive/2011/11/13/160007.html]Git Stash用法[/url]
[url=http://stackoverflow.com/questions/39651/git-stash-vs-git-branch]git-stash vs. git-branch[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值