痞子衡嵌入式:第一本Git命令教程(7.1)- 清理之缓存(stash)
今天是Git系列课程第七课,上一课我们学会了查看Git本地历史提交,今天痞子衡要讲的是Git仓库的清理操作,一共4个命令,都是日常开发中非常实用的命令,掌握这4个命令,会让你有一种玩弄Git仓库于股掌的感觉。
由于本节课是教程的核心课程,所以会分4小节课来讲,第一讲介绍git stash
1.缓存文件改动git stash
试想一下你在使用Git时有没有这样的经历,你正在写代码(修改文件),但是代码还没有写完善,没达到提交的标准,但是你知道了有另一个team member推送了一个提交,这个提交你需要立刻同步到你的本地,此时怎么办?是的,你需要本地缓存你的改动。
1.1缓存当前改动git stash [save -a "description"]
// 在test.c文件里增加一个test_stash0()函数
jay@pc MINGW64 /d/my_project/gittest (master)
$ git diff app/test.cdiff --git a/app/test.c b/app/test.c
index 70dde01..38b763c 100644
--- a/app/test.c
+++ b/app/test.c
@@ -1,5 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
+void test_stash0(void)
+{
+}
void test(void)
{
printf("this is test\n");
// 将增加test_stash0()函数的改动缓存起来
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash save -a "add test_stash0()"Saved working directory and index state On master: add test_stash0()
// 缓存之后查看Git空间很干净,说明缓存成功
jay@pc MINGW64 /d/my_project/gittest (master)
$ git statusOn branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits) nothing to commit, working tree clean
// 在test.c文件里再依次test_stash1()、test_stash2()函数,并依次缓存
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash save -a "add test_stash1()"Saved working directory and index state On master: add test_stash1()
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash save -a "add test_stash2()"Saved working directory and index state On master: add test_stash2()
1.2查看所有已缓存改动列表git stash list
// 查看缓存list,此时显示共有三次缓存
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash liststash@{0}: On master: add test_stash2()
stash@{1}: On master: add test_stash1()
stash@{2}: On master: add test_stash0()
1.3查看某个已缓存改动的具体细节git stash show -p [stash@{n}]
// 查看编号为 stash@{1} 的缓存的具体改动
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash show -p stash@{1}diff --git a/app/test.c b/app/test.c
index 70dde01..4380571 100644
--- a/app/test.c
+++ b/app/test.c
@@ -1,5 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
+void test_stash1(void)
+{
+}
void test(void)
{
printf("this is test\n");
1.4恢复某个已缓存改动git stash pop [stash@{n}]
现在我们需要从缓存区恢复某个已缓存改动,可以直接用git stash pop恢复最近的一次缓存,也可以用git stash pop stash@{n} 恢复任意指定的一次缓存(也可以用git stash pop apply stash@{n} 来恢复某个缓存,但是apply命令并不会将被恢复的缓存改动从缓存区list里删除)
// 将编号为 stash@{1} 的缓存恢复
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash pop stash@{1}On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits) Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: app/test.c no changes added to commit (use "git add" and/or "git commit -a")
Dropped stash@{1} (62daecdc826586bb3c0cbe93c5f8d2e2697e9ea)
// 查看原编号为 stash@{1} 的缓存的具体改动,确实已正常恢复
jay@pc MINGW64 /d/my_project/gittest (master)
$ git diff app/test.cdiff --git a/app/test.c b/app/test.c
index 70dde01..38b763c 100644
--- a/app/test.c
+++ b/app/test.c
@@ -1,5 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
+void test_stash0(void)
+{
+}
void test(void)
{
printf("this is test\n");
// 查看缓存list里被恢复的缓存"add test_stash1()"(原编号 stash@{1} 已被释放)已不在
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash liststash@{0}: On master: add test_stash2()
stash@{1}: On master: add test_stash0()
1.5丢弃某个已缓存改动git stash drop [stash@{n}]
// 从缓存list里直接删除编号为 stash@{1} 的缓存
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash drop stash@{1}Dropped stash@{1} (2f5dd9a45f77bcb24cac247b8f88bdec157798f2)
// 查看缓存list里被删除的缓存"add test_stash0()"(原编号 stash@{1} 已被释放)已不在
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash liststash@{0}: On master: add test_stash2()
1.6清空所有已缓存改动git stash clear
// 清空缓存list
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash clear// 查看缓存list,其已被清空
jay@pc MINGW64 /d/my_project/gittest (master)
$ git stash list
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:第一本Git命令教程(7.1)- 清理之缓存(stash)的更多相关文章
- 痞子衡嵌入式:第一本Git命令教程(0)- 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家讲的是Git命令汇编,共12篇文章,循序渐进地介绍Git操作的完整过程. 在开始Git课程之前,需要先跟大家普及2个重要概念(四度空间.四种状 ...
- 痞子衡嵌入式:第一本Git命令教程(1)- 准备(init/config/.gitignore)
今天是Git系列课程第一课,痞子衡给大家要讲的是创建仓库的准备工作. 1.建仓库git init 第一步是创建一个空仓库,这是一切操作的前提. // 打开git bash命令行,切换到指定目录下 ja ...
- 痞子衡嵌入式:第一本Git命令教程(3)- 变动(status/diff)
今天是Git系列课程第三课,前两课我们都是在做Git仓库准备工作,今天痞子衡要讲的是如何查看Git空间内发生的改动. 本地有了仓库,我们便可以在仓库所在目录下做文件增删改操作,为了确定改动操作的正确性 ...
- 痞子衡嵌入式:第一本Git命令教程(4)- 转移(add/rm/mv)
今天是Git系列课程第四课,上一课我们在Git空间里做了一些文件改动并且知道了如何利用Git查看这些变动,今天痞子衡要讲的是将这些变动提交到Git本地仓库前的准备工作. Git仓库目录下的文件改动操作 ...
- 痞子衡嵌入式:第一本Git命令教程(5)- 提交(commit/format-patch/am)
今天是Git系列课程第五课,上一课我们做了Git本地提交前的准备工作,今天痞子衡要讲的是Git本地提交操作. 当我们在仓库工作区下完成了文件增删改操作之后,并且使用git add将文件改动记录在暂存区 ...
- 痞子衡嵌入式:第一本Git命令教程(6)- 日志(log/reflog/gitk)
今天是Git系列课程第六课,上一课我们学会了Git本地提交,今天痞子衡要讲的是如何查看Git本地历史提交. 当我们在仓库里做了很多次提交之后,免不了需要回看提交记录,看看自己之前的改动.有三种Git命 ...
- 痞子衡嵌入式:第一本Git命令教程(2)- 连接(remote/clone)
今天是Git系列课程第二课,上一课我们已经学会在本地创建一个空仓库,痞子衡今天要讲的是如何将本地仓库与远程建立联系. 1.将本地仓库挂上远程git remote 本地建好了仓库,我们希望能够挂到远程服 ...
- 痞子衡嵌入式:超级下载算法RT-UFL v1.0发布,附J-Link下安装教程
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> 历时 8 个月终于迎来了 v1.0 版发布,因为是第一个正式版,为了保证质 ...
- 痞子衡嵌入式:超级好用的可视化PyQt GUI构建工具(Qt Designer)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是PyQt GUI构建工具Qt Designer. 痞子衡开博客至今已有好几年,一直以嵌入式开发相关主题的文章为主线,偶尔穿插一些其他技术 ...
随机推荐
- PeopleSoft OLE Automation error in Workbooks.Open: ObjectDoMethod: Microsoft Excel 不能访问文件
os: WinServer 2012 R2 64位 问题描述:PeopleSoft Web端运行AE 报上图错误,AD工具直接Test正常 解决方案: 运行> dcomcnfg 这将打开组件服务 ...
- Server的API如何设计才满足RESTful要求?
Server的API如何设计才满足RESTful要求? 首先是简洁版里面的那几点.外加一些附带的 best practices:1. URL root: https://example.org/api ...
- 马昕璐 201771010118《面向对象程序设计(java)》第十六周学习总结
第一部分:理论知识学习部分 程序:一段静态的代码,应用程序执行的蓝本. 进程:是程序的一次动态执行,它对应了从代码加载.执行至执行完毕的一个完整过程. 多线程:进程执行过程中产生的多条执行线索,比进程 ...
- jsp页面的地址
1. ${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> . 也就是取出部署的 ...
- SecureCRT连接虚拟机失败及虚拟机ping不通外网
背景: VMware上安装了centos,从学校的网络换到了家里后,用SecureCRT登录时发现 connection closed,然后在虚拟机里发现ping不通外网了,ping虚拟机IP是通的. ...
- 最基础的Eureka服务和注册搭建
Eureka服务端 打开IDEA,新建项目 选择"next",写上组织名(Group)和项目名(Artifact) 选择如下选项,然后一直下一步,创建好项目. 删除不必要的文件 添 ...
- 离线安装多版本node,使用nvm管理
windows环境下,使用nvm客户以方便地管理多个node版本,但有时候可能需要离线安装node版本. 结合网络搜搜索结果,多次尝试后我成功在离线安装了多个node版本,方法: 1.在其他联网环境下 ...
- FCC(ES6写法)Pairwise
举个例子:有一个能力数组[7,9,11,13,15],按照最佳组合值为20来计算,只有7+13和9+11两种组合.而7在数组的索引为0,13在数组的索引为3,9在数组的索引为1,11在数组的索引为2. ...
- Spring Cloud Eureka 使用 IP 地址进行服务注册
默认情况下,Eureka 使用 hostname 进行服务注册,以及服务信息的显示,那如果我们使用 IP 地址的方式,该如何配置呢?答案就是eureka.instance.prefer-ip-addr ...
- 最小化JIT示例(仅限Intel x86+Windows)
#include <Windows.h> #include <cstdint> #include <cstring> #define BACK_FILL (0) i ...