涉及命令:git stash、stash list、git stash apply、git stash drop
git stash:添加临时暂存(暂存当前工作区状态,并将工作区"HEAD"指针指向位于工作区的上一次提交)
stash list:列出临时暂存的列表
git stash apply:恢复临时暂存(恢复临时暂存会与当前的工作区状态合并)
git stash drop:删除临时暂存
操作例子:
[root@localhost hgg]# git status
# 位于分支 master
无文件要提交,干净的工作区
步骤解释:查看当前工作区状态是一个干净的工作区
[root@localhost hgg]# git branch dev
[root@localhost hgg]# git checkout dev
切换到分支 'dev'
步骤解释:创建并检出一个"dev"分支
[root@localhost hgg]# touch a.php
[root@localhost hgg]# git add .
步骤解释:在"dev"分支中新建一个"a.php"文件 , 并add添加到版本控制,但是还未提交,
这时我们临时有个bug要处理,"a.php"的功能还没做好所以不能提交到版本库,下面先去创建分支处理bug
[root@localhost hgg]# git branch bug
[root@localhost hgg]# git checkout bug
A a.php
切换到分支 'bug'
[root@localhost hgg]# ls
a.php
步骤解释:创建并检出一个"bug"分支,但是"dev"分支还未提交的"a.php"文件也在当前的新分支中,这显然不是我们想要的,所以就需要使用git stash 命令操作暂存区了
[root@localhost hgg]#
[root@localhost hgg]# git checkout dev
A a.php
切换到分支 'dev'
步骤解释:切换回到"dev"分支
[root@localhost hgg]# git stash
Saved working directory and index state WIP on dev: 40f08cc 删除所有文件
HEAD 现在位于 40f08cc 删除所有文件
步骤解释:使用git stash命令把工作区的更改单独存储起来,通过提示的信息可以看到,现在我们的工作区"HEAD"指针位于工作区的上一次提交(本工作区上一次提交是删除了所有文件,所以当前工作区应该没有文件了)
[root@localhost hgg]# git stash list
stash@{0}: WIP on dev: 40f08cc 删除所有文件
步骤解释:使用git stash list命令查看存储区的存储列表
[root@localhost hgg]# git status
# 位于分支 dev
无文件要提交,干净的工作区
[root@localhost hgg]# ls
步骤解释:查看工作区状态和目录的文件列表,确实回到了上一次的提交状态,这个时候回去解决bug先
[root@localhost hgg]# git checkout bug
切换到分支 'bug'
[root@localhost hgg]# ls
[root@localhost hgg]# touch bug.php
[root@localhost hgg]# git add .
[root@localhost hgg]# git commit -m "bug修复完成"
[root@localhost hgg]# git checkout dev
切换到分支 'dev'
[root@localhost hgg]# ls
步骤解释:切换到"bug"分支,修复完bug后提交,再切换到"dev"分支,
[root@localhost hgg]# git merge bug
[root@localhost hgg]# ls
bug.php
步骤解释:合并"bug"分支就可以看到"bug"分支的文件了,当然也可以不合并,我们要继续我们"dev"分支之前的"a.php"文件的工作了
[root@localhost hgg]# git stash apply
# 位于分支 dev
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 新文件: a.php
#
[root@localhost hgg]# ls
a.php bug.php
步骤解释:使用git stash apply命令从临时暂存区中恢复工作区状态,再次查看,可以看到,a.php文件又出现了,所以可以继续之前的工作了
[root@localhost hgg]# git stash list
stash@{0}: WIP on dev: 40f08cc 删除所有文件
步骤解释:从临时暂存区中恢复工作区状态后临时暂存还是存在
[root@localhost hgg]# git stash drop
丢弃了 refs/stash@{0} (04a1d0e71bdf876d0e2154031ef5c8785f69b5a0)
[root@localhost hgg]# git stash list
步骤解释:删除临时暂存
网友评论