子兮子兮 子兮子兮

子兮子兮风兮寒,三江七泽情洄沿。

目录
Git 临时储藏本地变更的 stash 命令常见用法
/      

Git 临时储藏本地变更的 stash 命令常见用法

临时保存的本地变更,储藏位置在 Git 栈中,与分支无关,所有分支共用一个储藏栈。

  1. 临时保存工作目录中已跟踪文件和暂存区的修改,以供后续切换回当前分支继续使用:

    git stash
    
  2. 同时保存工作目录未跟踪和已跟踪文件和暂存区的修改:

    git stash -u
    
    # 完整命令参数写法:
    git stash --include-untracked
    
  3. 查看临时保存记录,保存了几次就显示几条数据:

    $ git stash list
    
    # 执行结果:
    stash@{0}: WIP on master: d9b3b91 提交信息.
    stash@{1}: WIP on master: d9b3b91 提交信息.
    
  4. 临时保存并添加备注信息:

    # 储藏工作目录中已跟踪文件和暂存区的修改
    $ git stash save '修改的已跟踪文件'
    
    # 储藏工作目录中未跟踪的文件
    $ git stash save '添加的未跟踪文件' -u
    
    # 查看临时保存记录
    $ git stash list
    stash@{0}: On master: 添加的未跟踪文件
    stash@{1}: On master: 修改的已跟踪文件
    
  5. 储藏时只保存工作目录中的变更,保持已暂存的变更在暂存区中不动:

    git stash -k
    
    # 完整命令参数写法:
    git stash --keep-index
    
  6. 恢复上次临时保存的内容到工作目录,但在暂存区储藏的内容不会重新暂存,并在储藏栈中删除,git stash list 显示几条记录就可以执行此命令恢复几次:

    # 倒序恢复:stash@{1}
    git stash pop
    
    # 最后一条:stash@{0}
    git stash pop
    
  7. 恢复上次临时保存的内容到工作目录和暂存区,不会在储藏栈中自动删除:

    git stash apply --index
    
  8. 手动删除储藏栈中的无用内容,如通过 git stash apply 恢复后的遗留内容:

    # 多次执行逐条删除 stash@{0}
    git stash drop
    
    # 删除指定记录
    git stash drop stash@{0}
    
  9. 交互式储藏,由 Git 询问对每个变更的处理方式:

    $ git stash --patch
    
    # 执行效果:
    diff --git a/README.md b/README.md
    index b8f1529..d5c5175 100644
    --- a/README.md
    +++ b/README.md
    @@ -8,6 +8,7 @@
     1
     2
     3
    +
     git diff
     git diff2
     git diff3
    Stash this hunk [y,n,q,a,d,e,?]?
    
  10. 恢复临时存储的内容到一个新的分支,并在储藏栈中删除,以避免恢复时发生冲突:

    $ stash branch StashBranch
    
    # 执行结果
    Switched to a new branch 'StashBranch'
    On branch StashBranch
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   README.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
    Dropped refs/stash@{0} (e869a51f180db78e3520811a94a1e672d8f7cb71)