0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第一本Git命令教程(7.1)-清理之缓存

454398 来源:alpha007 作者:alpha007 2022-12-05 17:39 次阅读

今天是 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.c

diff --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 
 #include 
+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 status

On 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 list

stash@{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 
 #include 
+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 ..." to update what will be committed)
  (use "git checkout -- ..." 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.c

diff --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 
 #include 
+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 list

stash@{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 list

stash@{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


审核编辑黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Git
    Git
    +关注

    关注

    0

    文章

    195

    浏览量

    15495
收藏 人收藏

    评论

    相关推荐

    《Linux常用命令自学手册》+一本手边linux速查字典

    ,即使不能时都记住,本书也可以作为办公桌边随时查阅的工具书。 我手头有一本也是《linux命令速查手册》,16K的很厚一本,和本书对比了
    发表于 12-26 08:46

    Git命令解决常见场景记录

    不需要这些文件了,想要批量处理掉,所以记录一下用命令行一次性丢弃未跟踪文件的方法,同时也记录一下撤销push请求的git记录。
    的头像 发表于 12-20 09:44 257次阅读
    用<b class='flag-5'>Git</b><b class='flag-5'>命令</b>解决常见场景记录

    Git命令之本地分支与远程分支关联和解除

    在实际的工作生活中,往往需要将本地的分支和远程分支关联,这样我们就可以使用git pull命令来更新拉取最新的代码,并使用git push命令将自己本地的修改推送到远程仓库。但是如果此
    的头像 发表于 12-15 09:27 894次阅读
    <b class='flag-5'>Git</b><b class='flag-5'>命令</b>之本地分支与远程分支关联和解除

    git命令的基本使用

    git config 第一次使用git或者刚安装的git时,使用此命令设置身份Name 和 Eamail 地址。并且每次提交时会使用此信息。
    的头像 发表于 12-11 13:53 687次阅读

    Git中最常用的命令介绍

    git add命令用于将修改的文件添加到下一次提交的暂存区。你可以指定要添加的文件git add命令用于将修改的文件添加到下一次提交的暂存区。你可以指定要添加的文件,例如
    发表于 10-26 10:27 141次阅读
    <b class='flag-5'>Git</b>中最常用的<b class='flag-5'>命令</b>介绍

    Git常用的超级实用命令

    的一些Git工作流。 1 Git 常用的超级实用命令 1.1 与仓库相关的操作 克隆代码仓库到本地,开发必用 git clone 查看本地仓库配置了那些对应的远程仓库。
    的头像 发表于 10-09 17:19 985次阅读
    <b class='flag-5'>Git</b>常用的超级实用<b class='flag-5'>命令</b>

    如何在 Git 中恢复隐藏的修改记录

    git stash 和 git stash pop 这样的命令是用来搁置(藏匿)和恢复我们工作目录中的变化的。在本教程中,我们将学习如何在 Git 中恢复隐藏的修改记录。 在工作目
    的头像 发表于 10-09 14:09 582次阅读

    Git中的最常用命令详解

    分支是master。在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。 即便当前分支是某次提交的祖父节点,git会同样操作。下图
    的头像 发表于 09-13 16:41 663次阅读
    <b class='flag-5'>Git</b>中的最常用<b class='flag-5'>命令</b>详解

    git基本操作命令用法

    基本用法 上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。 git add files把当前文件放入暂存区域。 git commit给暂存区域生成快照并提交。 git
    的头像 发表于 09-13 16:29 616次阅读
    <b class='flag-5'>git</b>基本操作<b class='flag-5'>命令</b>用法

    我的第一本算法书

    发表于 08-25 11:08 3次下载
    我的<b class='flag-5'>第一本</b>算法书

    Git的工作原理和基本用法

    本文图解Git中的最常用命令。如果你稍微理解Git的工作原理,这篇文章能够让你理解的更透彻。
    的头像 发表于 08-07 10:25 479次阅读
    <b class='flag-5'>Git</b>的工作原理和基本用法

    git中如何查看提交历史

    查看提交历史 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。完成这个任务最简单而又有效的工具是 git log 命令。 我们使用一个非常简单的 “simplegit” 项目作为
    的头像 发表于 07-22 11:21 778次阅读
    <b class='flag-5'>git</b>中如何查看提交历史

    Git命令的综合手册怎么找

    若你使用 Git 时需要获取帮助,有三种等价的方法可以找到 Git 命令的综合手册(manpage): $ git help $ git -
    的头像 发表于 07-22 11:02 505次阅读

    Git常用命令总结

    在之前的文章中,我们讨论了一些初学者必备的 Git 命令。然而,这些命令仅仅触及了 Git 功能的皮毛。
    发表于 07-21 10:30 240次阅读

    git rebase和git merge的区别

      解决冲突 git rebase和git merge的区别 分支合并 git merge是用来合并两个分支的。 比如:将 b 分支合并到当前分支。 同样git rebase b,也是
    的头像 发表于 07-05 09:54 450次阅读
    <b class='flag-5'>git</b> rebase和<b class='flag-5'>git</b> merge的区别