zoukankan      html  css  js  c++  java
  • git stash用法小结

     当在一个分支的开发工作未完成,却又要切换到另外一个分支进行开发的时候,除了commit原分支的代码改动的方法外,我觉得git stash是一个更加便捷的选择。 
     
    git stash(git储藏)可用于以下情形: 
    • 发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑git stash。
    • 使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。

    • 经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

     步骤如下:

    1. 添加改动到stash。在原分支 git stash save -a "messeag",网上很多很多资料都没有加 -a 这个option选项,我想他们的代码开发可能都是在原代码上进行修改吧。而对于在项目里加入了代码新文件的开发来说,-a选项才会将新加入的代码文件同时放入暂存区。
    2. 恢复改动。如果你要恢复的是最近的一次改动,git stash pop 即可,我用这个用的最多。如果有多次stash操作,那就通过git stash list查看stash列表,从中选择你想要pop的stash,运行命令git stash pop stash@{id}或者 git stash apply stash@{id}即可。这方面网上的资料挺多的。

    3. 删除stashgit stash drop <stash@{id}> 如果不加stash编号,默认的就是删除最新的,也就是编号为0的那个,加编号就是删除指定编号的stash。git stash clear 是清除所有stash,整个世界一下子清净了!

    4. git stash popgit stash apply <stash@{id}> 的区别。

      当我使用git stash pop 和 git stash apply 几次以后,我发现stash list 好像比我预计的多了几个stash。于是我便上网去了解了一下这两个命令的区别。原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id。对于有点强迫症的我来说,是容不下越来越多的陈旧stash id 仍然存在的,所以我更习惯于用git stash pop 命令。

     git stash 使用实例 :
    生成测试环境
    // 初始化仓库,进行一次提交
    # git init stash-test
    # cd stash-test && echo 'hello'> readme
    # git add . && git commit -m "init"
    
    // 修改工作区和暂存区
    # echo 'need to be stashed' >> readme
    # git add readme
    
    // 查看此时工作区和版本库区别
    # git diff HEAD
    diff --git a/readme b/readme
    index ce01362..55d6c28 100644
    --- a/readme
    +++ b/readme
    @@ -1 +1,2 @@
     hello
    +need to be stashed
    执行stash及恢复
    // 暂存当前状态
    # git stash
     
    // 查看当前工作区和版本库区别
    # git diff HEAD
    ==> 此时什么都没有输出,说明工作区被重置为HEAD指向内容了
     
    // 显示已暂存列表
    # git stash list
    stash@{0}: WIP on master: 440e976 init
     
    // 恢复暂存区和工作区进度
    # git stash pop --index stash@{0}
     
    // 查看工作区和版本库区别
    # git diff HEAD
    diff --git a/readme b/readme
    index ce01362..55d6c28 100644
    --- a/readme
    +++ b/readme
    @@ -1 +1,2 @@
     hello
    

      命令详解:

    git stash  对当前的暂存区和工作区状态进行保存。 
    git stash list  列出所有保存的进度列表。 
    git stash pop [--index] [<stash>] 恢复工作进度
     

     

  • 相关阅读:
    DOS下读取4GB内存
    开始了
    PHP函数补完:var_export()
    php 调试相关
    css选择符
    javascript的urlencode
    用CSS代码绘制三角形 纯CSS绘制三角形的代码
    Jquery 操作Cookie
    提高PHP编程效率的53种方法
    执行phpinfo();时提示:date_default_timezone_set()
  • 原文地址:https://www.cnblogs.com/chenyablog/p/7902700.html
Copyright © 2011-2022 走看看