1. stash当前修改

git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。

比如下面的中间状态,通过git stash命令推送一个新的储藏,当前的工作目录就干净了。

$ git status

On branch master

Changes to be committed:

new file: style.css

Changes not staged for commit:

modified: index.html

$ git stash

Saved working directory and index state WIP on master: 5002d47 our new homepage

HEAD is now at 5002d47 our new homepage

$ git status

On branch master

nothing to commit, working tree clean

需要说明一点,stash是本地的,不会通过git push命令上传到git server上。

实际应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令。示例如下:

$ git stash save "test-cmd-stash"

Saved working directory and index state On autoswitch: test-cmd-stash

HEAD 现在位于 296e8d4 remove unnecessary postion reset in onResume function

$ git stash list

stash@{0}: On autoswitch: test-cmd-stash

2. 重新应用缓存的stash

可以通过git stash pop命令恢复之前缓存的工作目录,输出如下:

$ git status

On branch master

nothing to commit, working tree clean

$ git stash pop

On branch master

Changes to be committed:

new file: style.css

Changes not staged for commit:

modified: index.html

Dropped refs/stash@{0} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)

这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下。

你也可以使用git stash apply命令,将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝。命令输出如下:

$ git stash apply

On branch master

Changes to be committed:

new file: style.css

Changes not staged for commit:

modified: index.html

3. 查看现有stash

可以使用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

在使用git stash apply命令时可以通过名字指定使用哪个stash,默认使用最近的stash(即stash@{0})。

4. 移除stash

可以使用git stash drop命令,后面可以跟着stash名字。下面是一个示例:

$ 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)

或者使用git stash clear命令,删除所有缓存的stash。

5. 查看指定stash的diff

可以使用git stash show命令,后面可以跟着stash名字。示例如下:

$ git stash show

index.html | 1 +

style.css | 3 +++

2 files changed, 4 insertions(+)

在该命令后面添加-p或--patch可以查看特定stash的全部diff,如下:

$ git stash show -p

diff --git a/style.css b/style.css

new file mode 100644

index 0000000..d92368b

--- /dev/null

+++ b/style.css

@@ -0,0 +1,3 @@

+* {

+ text-decoration: blink;

+}

diff --git a/index.html b/index.html

index 9daeafb..ebdcbd2 100644

--- a/index.html

+++ b/index.html

@@ -1 +1,2 @@

+

6. 从stash创建分支

如果你储藏了一些工作,暂时不去理会,然后继续在你储藏工作的分支上工作,你在重新应用工作时可能会碰到一些问题。如果尝试应用的变更是针对一个你那之后修改过的文件,你会碰到一个归并冲突并且必须去化解它。如果你想用更方便的方法来重新检验你储藏的变更,你可以运行 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)

这是一个很棒的捷径来恢复储藏的工作然后在新的分支上继续当时的工作。

7. 暂存未跟踪或忽略的文件

默认情况下,git stash会缓存下列文件:

添加到暂存区的修改(staged changes)

Git跟踪的但并未添加到暂存区的修改(unstaged changes)

但不会缓存一下文件:

在工作目录中新的文件(untracked files)

被忽略的文件(ignored files)

git stash命令提供了参数用于缓存上面两种类型的文件。使用-u或者--include-untracked可以stash untracked文件。使用-a或者--all命令可以stash当前目录下的所有修改。

至于git stash的其他命令建议参考Git manual。

git stash //保存当前工作进度,会把暂存区和工作区的改动保存起来。

git stash save 'message.....'

git stash show //查看刚才暂存的修改

git stash list //查看暂存区的所有暂存修改

git stash pop //取出最近一次暂存并删除记录列表中对应记录

git stash pop stash@{1} //恢复指定的进度到工作区。stash_id是通过git stash list命令得到的

git stash apply stash@{X} //取出相应的暂存不删除记录列表中对应记录

git stash drop stash@{X} //将记录列表中取出的对应暂存记录删除

git stash drop [stash_id] //删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度

git stash clear //删除所有存储的进度。

git stash 强制恢复_git stash 保存和恢复进度相关推荐

  1. git stash 强制恢复_git stash恢复

    今天下午在使用Git命令进行代码管理时,因为自己一时疏忽直接把自己一天的劳动成果给弄丢了,这还了得,吓死宝宝了.真的,相信有代码丢失的朋友肯定能体会我当时的心情,不能体会我心情的那就祝你们也丢次代码, ...

  2. git reset 怎么还原_git reset后如何恢复

    "新来的实习生把自己做了一个月的功能给覆盖了,向我求救,要不要帮他?--编程三分钟" 第 8 篇 找回弄丢的代码 新来的实习生[悲郭]因为不太熟悉git的使用,总是把自己的代码给弄 ...

  3. git stash 强制恢复_git操作与分支管理规范

    git操作与分支管理规范 一.git操作规范 git操作流程数据流图 Remote:远程主仓库 Repository:本地仓库 Index:Git追踪树,暂存区 workspace:本地工作区 代码正 ...

  4. 使用git stash命令保存和恢复进度

    上一篇博客我们使用git checkout命令来切换分支. 我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可 ...

  5. Git常用操作(清除工作区未跟踪文件、保存和恢复进度、打标签)

    git clean 清除工作区未跟踪文件 git clean 命令去除冗余文件或者清理工作目录 git clean -f -d 移除工作目录中所有未追踪的文件以及空的子目录.(-f强制删除) git ...

  6. Git使用中关于rebase 、stash 、reflog、reset的一些注意点

    Git使用中关于rebase .stash .reflog.reset的一些注意点 本文不会介绍 Git 的基本操作,会对一些高级操作进行说明. rebase 合并 该命令可以让和 merge 命令得 ...

  7. git 修改标签名称_Git常用命令汇总,希望能帮到你

    展示帮助信息 git help -g 回到远程仓库的状态 抛弃本地所有的修改,回到远程仓库的状态. git fetch --all && git reset --hard origin ...

  8. git 覆盖本地修改_Git拉力–如何使用Git覆盖本地更改

    git 覆盖本地修改 When you learn to code, sooner or later you'll also learn about Version Control Systems. ...

  9. 在git 2.13之前,只保存多个已更改的文件中的一个文件

    如何在我的分支上只隐藏多个已更改文件中的一个? #1楼 类似的情况. 提交并意识到它不行. git commit -a -m "message" git log -p 根据答案,这 ...

最新文章

  1. CentOS虚拟机和物理机共享文件夹实现
  2. Linux 学习日记 2: 目录结构和文件操作
  3. 探寻阿里云服务器迈入2.0时代的技术要点
  4. 用C语言打开文件的几种方式及区别
  5. Spring-AOP 通过配置文件实现 异常抛出增强
  6. 超级直播sop直播源.zip_双11首场虚拟直播,天猫超级直播开创直播新玩法
  7. 【转载】大叔推荐博客索引
  8. python中字母大小顺序,如何在Python中按字母顺序对unicode字符串排序?
  9. backtrader指标
  10. 小米5点位图_最新!地铁5号线、6号线部分车站文化墙设计出炉!你选哪个?
  11. arguments 类数组
  12. mybatis中经典的9种设计模式
  13. c语言的链表怎么写,写一个C语言的链表记录一下
  14. 计算机教学训练的有效性,充分利用现代教育技术   提高课堂教学有效性
  15. static与get属性的作用
  16. 【转】wget 使用技巧
  17. ODE手册(6)关节类型和相关函数(下)
  18. 周鸿祎评互联网大佬的编程能力:我能排前三,谁排第一?
  19. 图文演示通过虚拟打印机生成pdf的使用技巧
  20. Python + Selenium自动化测试

热门文章

  1. 视联网赋能数字政府建设,推进基层公共服务系统驶入新通道
  2. 核心功能全部开源,虽霸榜GitHub,但怎么赚钱?
  3. 支付宝沙箱之电脑网站支付
  4. Java教程 -- 廖雪峰
  5. 碌碌无为的一年研究生生活
  6. flutter 视频解码器fijkplayer使用
  7. 举报奖励制度类毕业论文文献有哪些?
  8. 笔记本电脑排名前十2023 笔记本电脑什么牌子好
  9. 搭建web服务器,创建基于域名的虚拟主机
  10. 英特尔10nm难产的深层原因解析