zoukankan      html  css  js  c++  java
  • git stash 命令

    git stash 命令

    需求分析

    人和电脑一样,会遇到中断,需要保存现在的上下文转而去处理其他更紧急的事情。我们在使用git的时候也会遇到这样的情况。当在需要紧急处理一个bug时,工作区内容又没有完成,不适合提交,想暂存起来。

    方案实施

    git提供了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
    +need to be stashed

    哒哒~~之前的工作又回来啦

    命令详解

    注:

    •  []方括号中内容为可选,[<stash>]里面的stash代表进度的编号形如:stash@{0}, <>尖括号内的必填

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

    --index 参数:不仅恢复工作区,还恢复暂存区
    <stash> 指定恢复某一个具体进度。如果没有这个参数,默认恢复最新进度
    
    如:以下命令恢复编号为0的进度的工作区和暂存区
    # git stash pop --index stash@{0}

    git stash [save message] [-k|--no-keep-index] [--patch]

    这是git stash保存进度的完整命令形式
    使用save可以对进度添加备注
    # git stash save "这是保存的进度"
    
    现在执行list,会发现后面会出现自定义的被合租
    # git stash list
    stash@{0}: On master: 这是保存的进度
    
    -k和--no-keep-index指定保存进度后,是否重置暂存区
    --patch 会显示工作区和HEAD的差异,通过编辑差异文件,排除不需要保存的内容。和git add -p命令类似

    git stash apply [--index] [<stash>] 不删除已恢复的进度,其他同git stash pop 
    git stash drop [<stash>] 删除某一个进度,默认删除最新进度 
    git stash clear 删除所有进度 
    git stash branch <branchname> <stash> 基于进度创建分支

     

     

    关于git stash命令的使用方法网上一大把,我想记录的是我在使用过程中觉得实用及好用的:

    当在一个分支的开发工作未完成,却又要切换到另外一个分支进行开发的时候,除了commit原分支的代码改动的方法外,我觉得git stash是一个更加便捷的选择。

    步骤如下:

    一、添加改动到stash。在原分支 git stash save -a "messeag",网上很多很多资料都没有加 -a 这个option选项,我想他们的代码开发可能都是在原代码上进行修改吧。而对于在项目里加入了代码新文件的开发来说,-a选项才会将新加入的代码文件同时放入暂存区。

    二、恢复改动。如果你要恢复的是最近的一次改动,git stash pop即可,我用这个用的最多。如果有多次stash操作,那就通过git stash list查看stash列表,从中选择你想要pop的stash,运行命令git stash pop stash@{id}或者 git stash apply stash@{id}即可。这方面网上的资料挺多的。

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

    四、git stash pop  与 git 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 命令。


     
  • 相关阅读:
    使用South时候由于两个相同id的文件引起的问题
    Python os模块
    Ubuntu的关机重启命令知识
    [BUGFIX]__import_pywin32_system_module__
    Django生产环境的部署-Apache-mod_wsgi
    我是如何将linux用在开发环境中的
    php抽奖概率算法
    PHP接收IOS post过来的json数据无法解析的问题
    python apache下出现The _imaging C module is not installed
    php 打印
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/8540479.html
Copyright © 2011-2022 走看看