git stash命令用于将更改储藏在脏工作目录中。

使用语法

git stash list []

git stash show []

git stash drop [-q|--quiet] []

git stash ( pop | apply ) [--index] [-q|--quiet] []

git stash branch []

git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]

[-u|--include-untracked] [-a|--all] []

git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]

[-u|--include-untracked] [-a|--all] [-m|--message ]]

[--] […​]]

git stash clear

git stash create []

git stash store [-m|--message ] [-q|--quiet]

Shell

描述

当要记录工作目录和索引的当前状态,但想要返回到干净的工作目录时,则使用git stash。 该命令保存本地修改,并恢复工作目录以匹配HEAD提交。

这个命令所储藏的修改可以使用git stash list列出,使用git stash show进行检查,并使用git stash apply恢复(可能在不同的提交之上)。调用没有任何参数的git stash相当于git stash save。 默认情况下,储藏列表为“分支名称上的WIP”,但您可以在创建一个消息时在命令行上给出更具描述性的消息。

创建的最新储藏存储在refs/stash中; 这个引用的反垃圾邮件中会发现较旧的垃圾邮件,并且可以使用通常的reflog语法命名(例如,stash@{0}是最近创建的垃圾邮件,stash@{1}是stash@{2.hours.ago}之前也是可能的)。也可以通过指定存储空间索引(例如整数n相当于储藏stash@{n})来引用锁存。

示例

以下是一些示例 -

1.拉取到一棵肮脏的树

当你处于某种状态的时候,你会发现有一些上游的变化可能与正在做的事情有关。当您的本地更改不会与上游的更改冲突时,简单的git pull将让您向前。

但是,有些情况下,本地更改与上游更改相冲突,git pull拒绝覆盖您的更改。 在这种情况下,您可以将更改隐藏起来,执行git pull,然后解压缩,如下所示:

git pull

...

file foobar not up to date, cannot merge.

$ git stash

$ git pull

$ git stash pop

Shell

2.工作流中断

当你处于某种状态的时候,比如你的老板进来,要求立即开会或处理非常紧急的事务。 传统上,应该提交一个临时分支来存储您的更改,并返回到原始(original)分支进行紧急修复,如下所示:

# ... hack hack hack ...

$ git checkout -b my_wip

$ git commit -a -m "WIP"

$ git checkout master

$ edit emergency fix # 编辑内容

$ git commit -a -m "Fix in a hurry"

$ git checkout my_wip

$ git reset --soft HEAD^

# ... continue hacking ...

Shell

上面过程可以使用git stash来简化上述操作,如下所示:

# ... hack hack hack ...

$ git stash

$ edit emergency fix

$ git commit -a -m "Fix in a hurry"

$ git stash pop

# ... continue hacking ...

Shell

3.测试部分提交

当要从工作树中的更改中提交两个或多个提交时,可以使用git stash save --keep-index,并且要在提交之前测试每个更改:

# ... hack hack hack ...

$ git add --patch foo # add just first part to the index

$ git stash save --keep-index # save all other changes to the stash

$ edit/build/test first part

$ git commit -m 'First part' # commit fully tested change

$ git stash pop # prepare to work on all other changes

# ... repeat above five steps until one commit remains ...

$ edit/build/test remaining parts

$ git commit foo -m 'Remaining parts'

Shell

4.恢复被错误地清除/丢弃的垃圾

如果你错误地删除或清除了垃圾,就不能通过正常的安全机制来恢复。 但是,您可以尝试以下命令来获取仍在存储库中但仍无法访问的隐藏列表:

git fsck --unreachable |

grep commit | cut -d\ -f3 |

xargs git log --merges --no-walk --grep=WIP

Shell

5.储藏你的工作

为了演示这一功能,可以进入你的项目,在一些文件上进行工作,有可能还暂存其中一个变更。如果运行git status,可以看到你的中间状态:

$ git status

# On branch master

# Changes to be committed:

# (use "git reset HEAD ..." to unstage)

#

# modified: index.html

#

# Changes not staged for commit:

# (use "git add ..." to update what will be committed)

#

# modified: lib/simplegit.rb

#

Shell

现在你想要切换分支,但是还不想提交正在进行中的工作;所以储藏这些变更为了往堆栈推送一个新的储藏,只要运行 git stash:

$ git stash

Saved working directory and index state \

"WIP on master: 049d078 added the index file"

HEAD is now at 049d078 added the index file

(To restore them type "git stash apply")

Shell

现在,工作目录就干净了:

$ git status

# On branch master

nothing to commit, working directory clean

Shell

这时,可以方便地切换到其他分支工作;变更都保存在栈上。要查看现有的储藏,可以使用 git stash list,如下所示 -

$ git stash list

stash@{0}: WIP on master: 049d078 added the index file

stash@{1}: WIP on master: c264051 Revert "added file_size"

stash@{2}: WIP on master: 21d80a5 added number to log

Shell

在这个案例中,之前已经进行了两次储藏,所以你可以访问到三个不同的储藏。你可以重新应用你刚刚实施的储藏,所采用的命令就是之前在原始的 stash 命令的帮助输出里提示的:git stash apply。如果你想应用更早的储藏,可以通过名字指定它,像这样:git stash apply stash@{2}。如果不指明,Git 默认使用最近的储藏并尝试应用它:

$ git stash apply

# On branch master

# Changes not staged for commit:

# (use "git add ..." to update what will be committed)

#

# modified: index.html

# modified: lib/simplegit.rb

#

Shell

对文件的变更被重新应用,但是被暂存的文件没有重新被暂存。想那样的话,必须在运行 git stash apply 命令时带上一个 --index 的选项来告诉命令重新应用被暂存的变更。如果是这么做的,应该已经回到原来的位置:

$ git stash apply --index

# On branch master

# Changes to be committed:

# (use "git reset HEAD ..." to unstage)

#

# modified: index.html

#

# Changes not staged for commit:

# (use "git add ..." to update what will be committed)

#

# modified: lib/simplegit.rb

#

Shell

apply 选项只尝试应用储藏的工作——储藏的内容仍然在栈上。要移除它,可以运行 git stash drop 再加上希望移除的储藏的名字:

$ git stash list

stash@{0}: WIP on master: 049d078 added the index file

stash@{1}: WIP on master: c264051 Revert "added file_size"

stash@{2}: WIP on master: 21d80a5 added number to log

$ git stash drop stash@{0}

Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)

Shell

也可以运行 git stash pop 来重新应用储藏,同时立刻将其从堆栈中移走。

6.取消储藏

在某些情况下,可能想应用储藏的修改,在进行了一些其他的修改后,又要取消之前所应用储藏的修改。Git没有提供类似于 stash unapply 的命令,但是可以通过取消该储藏的补丁达到同样的效果:

$ git stash show -p stash@{0} | git apply -R

Shell

同样的,如果沒有指定具体的某个储藏,Git 会选择最近的储藏:

$ git stash show -p | git apply -R

Shell

可能会想要新建一个別名,在你的 Git 里增加一个 stash-unapply 命令,这样更有效率。例如:

$ git config --global alias.stash-unapply '!git stash show -p | git apply -R'

$ git stash apply

$ #... work work work

$ git stash-unapply

Shell

7.从储藏中创建分支

如果储藏了一些工作,暂时不去理会,然后继续在你储藏工作的分支上工作,在重新应用工作时可能会碰到一些问题。如果尝试应用的变更是针对一个在那之后修改过的文件,会碰到一个归并冲突并且必须去化解它。如果你想用更方便的方法来重新检验储藏的变更,可以运行 git stash branch,这会创建一个新的分支,检出储藏工作时的所处的提交,重新应用你的工作,如果成功,将会丢弃储藏。

$ git stash branch testchanges

Switched to a new branch "testchanges"

# On branch testchanges

# Changes to be committed:

# (use "git reset HEAD ..." to unstage)

#

# modified: index.html

#

# Changes not staged for commit:

# (use "git add ..." to update what will be committed)

#

# modified: lib/simplegit.rb

#

Dropped refs/stash@{0} (f0dfc4d5dc332d1cee34a634182e168c4efc3359)

原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/git/git_stash.html

git shanchu stash_git stash命令详解相关推荐

  1. git shanchu stash_git stash命令使用手册

    修改记录压栈保存: git stash push -u -m "msg" // -u ~ --意思是包含未被跟踪的文件 git stash push -m "msg&qu ...

  2. git shanchu stash_git stash命令

    git stash命令 当切换分支的时候,如果有未提交的变更记录,此时系统会阻止你切换分支,解决方法有两种. 一种是先将代码commit,切换分支修改完毕,再次切换回原分支,利用amend命令,取消c ...

  3. Git stash命令详解和使用

    Git stash命令详解和使用 stash的原理: 将本地没提交的内容(git commit的内容不会被缓存 但git add的内容会被缓存)进行缓存并从当前分支移除,缓存的数据结构为堆栈,先进后出 ...

  4. git stash 命令详解

    1. 应用场景 2. 添加储藏 3. 查看储藏 4. 删除储藏 5. 使用储藏 6. 常见用法 1. 应用场景 git stash 命令用于将工作区中的更改和暂存区中的内容储存起来 日常开发中,会经常 ...

  5. git shanchu stash_git stash用法

    常用git stash命令: (1)git stash save "save message"  : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不 ...

  6. Git 常用命令详解

    Git 常用命令详解 1. Git 常用命令 1.1 常用git 命令图表汇总 1.2 配置个人信息 1.3 创建版本库 1.4 常用Git命令汇总 2. Git 解决代码冲突 3. Git 分支管理 ...

  7. git stash用法详解

    文章转载自:https://blog.csdn.net/stone_yw/article/details/80795669 应用场景: 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧 ...

  8. Git 常用命令详解(二)

    2019独角兽企业重金招聘Python工程师标准>>> Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档 ...

  9. git config设置用户名_一个神奇的工具,实现多人协作,git常用命令详解

    git是一款开源的分布式版本控制工具,在世界上所有分布式版本控制工具中,git是最快.最简单.最流行的. git的作者是Linux之父:Linus Benedict Torvalds,当初开发git仅 ...

最新文章

  1. Interview:算法岗位面试—11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知、计算机视觉算法的理解、目标检测相关项目案例
  2. 腐烂国度2怎么学计算机,腐烂国度2按键操作说明 腐烂国度2怎么操作
  3. Spring-Bean标签属性scope范围
  4. boost::log::core用法的测试程序
  5. Pandas库学习笔记
  6. ST:没错,又是我!继续涨价!
  7. 20220207-CTF-MISC-第11题--- base64隐写--附带脚本
  8. 利用延迟关联或者子查询优化超多分页场景
  9. mysql linux 安装_mysql-5.7.28 在Linux下的安装教程图解
  10. (转)一步一步Asp.Net MVC系列_权限管理之权限控制
  11. JAVA内置注解 基本注解
  12. springboot中redis的工具类及配置类
  13. 数据结构 严蔚敏 4.3.4
  14. java 加密解密,编码解码工具类
  15. 使用OpenOffice实现Word转Html
  16. webView 修改背景颜色
  17. linux系统安装firefox的flash player插件
  18. 1每天Python小例-12306爬虫#WinError 2
  19. TestLink1.6.0安装说明
  20. 少壮不努力,老大抢小米

热门文章

  1. 【OpenCV】用OpenCV进行大恒CG400CG410视频采集卡的视频读取
  2. 关于习惯——《习惯的力量》读后感
  3. (CoRL2020)DIRL: Domain-Invariant Representation Learning Approach for Sim-to-Real Transfer 论文笔记
  4. Python:CSV到MySQL数据库
  5. Duplicate entry ‘2147483647‘ for key ‘PRIMARY
  6. TM1648A驱动程序
  7. JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制
  8. redis未授权访问漏洞环境搭建复现-ssh免密登录
  9. jquery设置cookie、删除cookie、获取cookie
  10. Task2-爬虫-正则学习与实践(爬取天猫商品名称价格)