美文网首页
使用stash缓存代码修改

使用stash缓存代码修改

作者: 醉看红尘这场梦 | 来源:发表于2020-03-16 09:02 被阅读0次

    在之前的内容中我们提到过,当你在某个分支上进行开发时,如果要紧急切换回master修复BUG,则可以先在当前分支上提交,之后切换分支,修复BUG并提交,然后,切换回功能分支继续开发。当然,这只是一个理想的情况,现实中,有很多时候,我们的代码还不具备提交条件,面对这种情况,该怎么办呢?

    把提交当作代码的临时缓冲区

    为了演示这个过程,首先,我们新建一个目录git-stash,在这里,执行git init创建一个新的repository。然后,在git-stash中新建个文件index.txt,并在master分支提交一次:

    git add .
    git commit -m "Add index.txt"
    
    

    接下来,为了开发新功能,我们新建并切换到了feature/about分支上:

    git checkout -b feature/about
    
    

    完成后,我们新建个文件about.txt,并给它添加一些内容,例如:"About us.",模拟正在开发:

    echo "About us." > about.txt
    
    

    这时,假设我们要切换回master分支修复bug,但此时about.txt还未完成,我们又不能提交。在这种情况下,如果直接切换回master分支,就会看到这样的结果:

    当然,我们并不想,也不应该在master分支上看到这些之前在feature/about分支上的操作。就像在这一节开始说到的,为了避免这种情况,通常我们会执行下面的命令回到feature/about分支,执行一次"Working In Progress"提交:

    git checkout feature/about
    git add .
    git commit -m "WIP"
    
    

    然后,回到master需改bug,完成后,再回到feature/about,执行git log找到WIP前一次提交的ID,并执行:

    git reset --soft 519f5da64a88bdf18c540d55d3f125f5f61af68f
    
    

    回到提交之前,继续我们的开发工作。其实,这算不上是什么“不恰当”的举动,很多时候,我们都在用这种方式缓存代码。要说唯一不好的地方,就是用起来有点儿啰嗦。面对这种常见的场景,git提供一个更方便的方法,叫做git stash

    使用git stash临时缓存代码

    现在,执行git status,我们的状态是这样的:

    image

    为了在feature/about分支上“缓存”这个修改,我们只要直接执行git stash就好了。完成后,git会给我们一个提示信息:

    image

    这时,再执行git status就可以看到feature/about分支变干净了。我们切换到master分支,此时,master分支上也不会再有我们新建的文件:

    image

    我们也就可以安全地在master分支上,进行各种必要的工作了。

    现在,假设master上的工作完成了,我们切换回feature/about。该怎么取回之前“缓存”的代码呢?我们先执行git stash list,查看下所有的“缓存”:

    image

    可以看到,每个缓存都会有一个形如stash{0}这样的ID。为了从“缓存”恢复,我们可以执行git stash apply stash{0}。这里的stash ID是可选的,如果不指定,git就会使用最新的一次stash把“缓存”的代码恢复回来:

    image

    但这时,再执行git stash list就会发现“缓存”还在。如果我们希望恢复并清除“缓存”,可以执行git stash pop stash{0}

    我们也可以执行git stash drop stash{0}手工清除“缓存记录”。

    把stash“推送”到新分支上

    在这一节最后,我们来看下面这样的场景:假设我们在feature/about分支上,并在这个分支上“缓存”代码。然后,我们切换回master分支完成了一些工作。

    接下来,由于操作失误,我们不小心删掉了feature/about分支,怎么办呢?

    这时,执行git stash list就会看到,之前feature/about上的“缓存”记录还是存在的。我们可以执行git stash pop把缓存的内容先恢复到master分支上:

    image

    然后重新执行git stash,这时,就是对master分支上的“缓存”了。最后,我们只要执行git stash branch feature/aboutgit就会用缓存的内容创建并切换到feature/about分支。这样,就可以继续之前的开发工作了:

    image

    相关文章

      网友评论

          本文标题:使用stash缓存代码修改

          本文链接:https://www.haomeiwen.com/subject/krryjhtx.html