前言
今天提交带码的时候造成代码丢失,找了一下午才找到,学到了一个新的知识点记录一下
我遇到问题的操作是:
- git status ,代码正常
- git add . 代码正常
- git commit -m"~~" 执行这个操作,出现了代码的校验,然后报了一些错误,之后我发现我的本地的代码就没了,
- 我多次尝试 git commit --no-verify -m"~~" 发现提交的是空的,我的代码找不到了
- 然后各种百度,发现了 git stash
git stash
git stash
用于保存和恢复工作进度,保存当前的工作进度。会分别对暂存区和工作区的状态进行保存。git stash list
显示进度列表,我们可以用 git stash 多次保存工作的进度,git stash pop [--index] [<stash>]
如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除,如果提供参数(来自git stash list显示的列表),则从该中恢复。恢复完毕 也将从进度列表中删除。选项–index除了恢复工作区的文件外,还尝试恢复暂存区。这也就是为什么在本章一 开始恢复进度的时候显示的状态和保存进度前的略有不同。git stash drop [<stash>]
删除一个存储的进度。默认删除最新的进度。git stash clear
删除所有存储的进度。git stash branch <branchname> <stash>
基于进度创建分支。
git stash 的应用场景
当我们在做着自己的工作时,要求解决一个bug并提交到主分支,但是我们的工作还没有完成,这时候
- 我们可以通过
git stash
保存现在的工作状态, - 然后新建一个新的临时分支修改我们的bug之后,通过
git add 指定文件
进行提交我们修改的bug的文件,提交完成之后可以删除临时分支, - 然后切换到我们的分支,通过
git stash list
查看刚才保存的工作进度。
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;git stash pop
,恢复的同时把stash内容也删了:
$ git stash pop
# On branch dev
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: hello.py
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)
再用git stash list
查看,就看不到任何stash内容了: