工作中,我们时常同时进行多个任务的开发,比如我们正在一个dev1分支上进行开发,突然来了一个紧急需求,需要你去dev2上进行一些修改。但此时,你在dev1上的开发还没结束,你不想把开发到一半的代码进行提交,也不想撤销你刚才辛辛苦苦写的一大段代码。这时你希望的是能把修改的内容先保存在这个分支内部,等解决完dev2上的问题,再回到dev1分支找回刚才的修改继续开发。
我们新创建一个项目git-deep-study,使用git init使其成为一个git仓库,然后新增一个file1文件并提交。
git stash
此时我们正处于默认的master分支上,让我们随便在file1文件中写上一些话,然后:
发现我们刚才的修改不见了,不在工作区,不在暂存区,也找不到提交记录了。
git stash list
我们通过git stash保存的修改,可以使用git stash list命令全部列出来,最新的一条会显示在列表的第0项。
git stash apply n
我想找回stash的修改,那该怎么办呢?使用git stash apply就会发现刚才的修改又回来了!
这样两步就可以满足我们开头所说的问题,不提交但保存我们在工作区的内容,然后需要的时候再找回来。
- 当我们的工作区修改的内容和我们stash的内容有冲突时,使用git stash apply会出错。
- 当我们希望找回的不是最新的一条stash记录,只需要添加一个参数即可:
git stash list n,这个n就是我们在git stash list时候看到的下标项,即不写n的时候默认是0。
git stash push
stash不难,难的是当我们有多个stash的时候,仅凭list里的一点信息我已经分不清哪个stash是我需要找回的stash了!所以如果在进行stash的时候能让我添加一些注释信息,就能方便很多。
git stash push -m 'info added'
这个时候我们可以的知道我们要找回的修改是哪一个并使用
git stash apply n 进行找回。但通常情况下,我们已经找回的stash,就不再希望还保存在stash list中了,所以还有一个命令可以找回stash且同时在stash list中将其删除。
git stash pop n
所以这样看下来,我更希望你使用
git stash push -m 'message' 保存stash ,使用 git stash pop 0进行找回!
git stash drop n / git stash clear
最后介绍两条命令,就是当你的stash里存储了太多没用的修改,使用这两条命令就可以把它们删掉。