git 的存储操作 | git stash 的使用方法

更详细的内容,请参考git 文档



今天4月份才开始使用git,经历了几个月的使用,发现相见很晚,真是方便。
平时常用的也无非就是 git pull ,git add , git commit , git push, git rm, git checkout 这些命令,其他命令没咋用过,也不太清楚。
月初的时候,在观察同事的操作时,发现了一个十分好用的git命令:

git stash

在知道这个命令前,我一般都是通过git commit -am "注释“ 来保存自己之前的修改,然后再去master分支上生成一个新的分支来解决突发事件,解决完毕后,再切换到之前的分支继续开发,然后用git add 和git commit --amend 来解决提交问题。

那么,在得知了这个命令之后,我们只需要这么一段命令,就可以把手头上的事情给存储起来,然后再去解决一些突发事件。等事情结束后,在从git库中把之前的修改取出来即可。

例如,现在正在stash分支上,并且修改了a.php文件

localhost:~/work/test_git/sample(stash)$ git status
位于分支 stash
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
	修改:     a.php
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
localhost:~/work/test_git/sample(stash)$ 

这个时候,其他地方出现了一个紧急bug需要你赶紧去改
那么只需要输入 git stash 即可把你修改的内容存储起来,呈现处一个干净的工作区

localhost:~/work/test_git/sample(stash)$ git stash 
保存工作目录和索引状态 WIP on stash: 720bf34 测试并打上标签
localhost:~/work/test_git/sample(stash)$ git status
位于分支 stash
无文件要提交,干净的工作区
localhost:~/work/test_git/sample(stash)$ 

存储的记录,可以通过 git stash list 来查看

localhost:~/work/test_git/sample(stash)$ git stash list
stash@{0}: WIP on stash: 720bf34 测试并打上标签
stash@{1}: WIP on master: 6c816f2 log查看
stash@{2}: WIP on master: 6c816f2 log查看
stash@{3}: WIP on bianji: 87120dc 恢复隐藏存储,并解决冲突
localhost:~/work/test_git/sample(stash)$ 

这条记录就是最近一次 git stash 的执行保存的内容

stash@{0}: WIP on stash: 720bf34 测试并打上标签

在解决完其他分支的紧急bug后,我们可以通过 git stash pop 来恢复之前的修改,记住要先切换到你之前的那个分支下来执行 git stash pop

localhost:~/work/test_git/sample(stash)$ git stash pop
位于分支 stash
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     a.php

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
丢弃了 refs/stash@{0} (ce625540e83daed47d0b599a04d87d33d30b2bb2)
localhost:~/work/test_git/sample(stash)$ 

执行完毕后,我们就可以接着之前的进度来继续开发需求。

假如我们存储的记录不是stash@{0},那么我们可以通过 git stash apply 来指定记录来进行恢复
比如,我们要恢复master上的stash@{1} 记录,只需要在master分支上执行 git stash apply stash@{1} 即可

localhost:~/work/test_git/sample(master)$ git stash list
stash@{0}: WIP on stash: 720bf34 测试并打上标签
stash@{1}: WIP on master: 6c816f2 log查看
stash@{2}: WIP on master: 6c816f2 log查看
stash@{3}: WIP on bianji: 87120dc 恢复隐藏存储,并解决冲突
localhost:~/work/test_git/sample(master)$ git stash apply stash@{1} 
自动合并 a.php
位于分支 master
您的分支与上游分支 'origin/master' 一致。
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
	修改:     a.php
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
localhost:~/work/test_git/sample(master)$ 

如果暂存库过多,想要全部去除,可以使用

git stash clear 

来清空暂存库
如果只要删除一条记录,使用 git stash drop stash@{0} 即可

git stash drop stash@{0}

如果有新加的文件,可以使用 git stash -u|–include-untracked 来把当前分支所有内容都暂存起来
目前工作区的状态:

位于分支 master
您的分支与上游分支 'origin/master' 一致。

尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     d.php

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

        e.php

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
localhost:~/work/test_git/sample(master)$ 

使用git的暂存功能

localhost:~/work/test_git/sample(master)$ git stash -u
保存工作目录和索引状态 WIP on master: 720bf34 测试并打上标签
localhost:~/work/test_git/sample(master)$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。

无文件要提交,干净的工作区
localhost:~/work/test_git/sample(master)$ 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值