首页 > 其他分享 >git stash

git stash

时间:2023-05-29 18:33:50浏览次数:43  
标签:index 缓存 命令 stash 修改 git

原文链接:https://blog.csdn.net/qq_35458793/article/details/84874161
git stash (git 储藏)用于以下场景:

1.发现一个类是多余的,想删掉它担心之后会用到它,想保存但又不想增加一个脏的提交,这时候可以考虑使用git stash;

2.使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。

3.经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

stash 的用法

  1. stash当前修改 (git stash save)
    git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。通过git stash命令推送一个新的储藏,当前的工作目录就干净了。

需要说明一点,stash是本地的,不会通过git push命令上传到git server上。
实际应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令。示例如下:

git stash save "修改了index文件"

git stash list

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

$ git status

$ git stash pop

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

$ git stash apply

  1. 查看现有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})。

  1. 移除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。

  1. 查看指定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 @@
    +
  1. 从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)
这是一个很棒的捷径来恢复储藏的工作然后在新的分支上继续当时的工作。

  1. 暂存未跟踪或忽略的文件
    默认情况下,git stash会缓存下列文件:

添加到暂存区的修改(staged changes)
Git跟踪的但并未添加到暂存区的修改(unstaged changes)
但不会缓存一下文件:

在工作目录中新的文件(untracked files)
被忽略的文件(ignored files)
git stash命令提供了参数用于缓存上面两种类型的文件。使用-u或者--include-untracked可以stash untracked文件。使用-a或者--all命令可以stash当前目录下的所有修改。

标签:index,缓存,命令,stash,修改,git
From: https://www.cnblogs.com/zongliang-ya/p/17441308.html

相关文章

  • git团队协作_network
    Git教程:https://www.runoob.com/git/git-tutorial.htmlGit大全:Git大全-Gitee.comGit分支管理一种适合小团队的Git协作流程-知乎(zhihu.com)[GitHub的Fork是什么意思?-知乎(zhihu.com)](https://www.zhihu.com/question/20431718/answer/74250205?utm_campaign=s......
  • 记录一次jenkins远程发布github中的net core 项目
    安装jenkinshttps://www.cnblogs.com/YorkQi/p/13658531.html进入jenkins容器dockerexec-it 容器编号bash设置github的sshkey  因为jinkens拉取不能直接用账户密码apt-getupdateapt-getinstallvimssh-keygen-trsa-C"邮箱"PS: /root/.ssh/文件夹下就是你的......
  • Ubuntu下 git 报ssh key错误
    先贴错误:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WARNING:POSSIBLEDNSSPOOFINGDETECTED!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@TheECDSAhostkeyforsh.gitlab.XXX.comhaschanged,andthekeyforthecorrespon......
  • 修改GIT历史记录
    准备工作GIT:https://git-scm.com/download/win[可选]Idea:https://www.jetbrains.com/zh-cn/idea/开始修改命令行模式打开命令行,将命令行的路径指向需要修改的项目。输入如下命令:gitrebase-r-i<commitid>^#commitid为需要开始修改的提交id在自动打开的编辑器(VI)......
  • git clean cheat sheet
    tags:[git,published]TL;DRgit默认只会非递归地删除当前目录下不被ignore匹配、且不在untracked目录中的untracked文件是否被ignore文件匹配的使用-x删除ignore文件[1]所在目录是否untracked如果是,需要使用-d删除default行为默认会删除当前目录下的......
  • git 报错;bad config in file .gitconfig
    报错如下解决办法删除.gitconfig文件,然后重启gitbash&vscode即可正常显示分支了。记得重新设置git的账号邮箱。......
  • 《HelloGitHub》第 86 期
    兴趣是最好的老师,HelloGitHub让你对编程感兴趣!简介HelloGitHub分享GitHub上有趣、入门级的开源项目。https://github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言Python、Java、Go、C/C++、Swift.........
  • 源代码管理工具介绍----Github
        源代码管理工具是软件开发中非常重要的工具,它们用于追踪、管理和协调团队成员之间的代码更改。源代码管理工具使开发团队能够跟踪代码的版本历史。这意味着你可以回顾代码的先前状态、比较不同版本之间的差异,并且能够轻松地恢复到先前的工作状态。这对于修复错误、撤销......
  • Gitlab简单使用与配置
    添加组,创建用户,创建项目 创建组:    ......
  • jenkins+gitlab 实现代码自动部署
    Jenkins设置:点击:ManageJenkins:点击:ManageCredentials点击:StoresscopedtoJenkins下的全局点击:添加凭据添加gitlab访问凭据只需要填写如下三个即可。这里填写的是gitlab的账户,不是linux系统账户,这个gitlab账户要对你所需要部署的项目有权限才可以;设置ssh账户密码:选择Mana......