git的stash命令怎么应用

这篇文章主要讲解了“git的stash命令怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“git的stash命令怎么应用”吧!

为什么 git stash 很重要?

首先要明白为什么在 Git 中暂存变更很重要。假设 Git 没有暂存变更的命令。当你正在一个有两个分支(A 和  B)的仓库上工作时,这两个分支已经分叉了一段时间,并且有不同的头。当你正在处理 A 分支的一些文件时,你的团队要求你修复 B  分支的一个错误。你迅速将你的修改保存到 A 分支(但没有提交),并尝试用 git checkout B 来签出 B 分支。Git 会立即中止了这个操作,并抛出错误:“你对以下文件的本地修改会被该签出覆盖……请在切换分支之前提交你的修改或将它们暂存起来。”

在这种情况下,有几种方法可以启用分支切换:

  • 在分支 A 中创建一个提交,提交并推送你的修改,以修复 B 中的错误,然后再次签出 A,并运行 git reset HEAD^ 来恢复你的修改。

  • 手动保留不被 Git 跟踪的文件中的改动。

第二种方法是个馊主意。第一种方法虽然看起来很传统,但却不太灵活,因为保存未完成工作的修改会被当作一个检查点,而不是一个仍在进行中的补丁。这正是设计 git stash 的场景。

git stash 将未提交的改动保存在本地,让你可以进行修改、切换分支以及其他 Git 操作。然后,当你需要的时候,你可以重新应用这些存储的改动。暂存是本地范围的,不会被 git push 推送到远程。

如何使用 git stash

下面是使用 git stash 时要遵循的顺序:

  1. 将修改保存到分支 A。

  2. 运行 git stash

  3. 签出分支 B。

  4. 修正 B 分支的错误。

  5. 提交并(可选)推送到远程。

  6. 查看分支 A

  7. 运行 git stash pop 来取回你的暂存的改动。

git stash 将你对工作目录的修改存储在本地(在你的项目的 .git 目录内,准确的说是 /.git/refs/stash),并允许你在需要时检索这些修改。当你需要在不同的上下文之间切换时,它很方便。它允许你保存以后可能需要的更改,是让你的工作目录干净同时保持更改完整的最快方法。

如何创建一个暂存

暂存你的变化的最简单的命令是 git stash

$ git stashSaved working directory and index state WIP on master; d7435644 Feat: configure graphql endpoint

默认情况下,git stash 存储(或称之为“暂存”)未提交的更改(已暂存和未暂存的文件),并忽略未跟踪和忽略的文件。通常情况下,你不需要暂存未跟踪和忽略的文件,但有时它们可能会干扰你在代码库中要做的其他事情。

你可以使用附加选项让 git stash 来处理未跟踪和忽略的文件:

  • git stash -u 或 git stash --includ-untracked 储存未追踪的文件。

  • git stash -a 或 git stash --all 储存未跟踪的文件和忽略的文件。

要存储特定的文件,你可以使用 git stash -p 或 git stash -patch 命令:

$ git stash --patchdiff --git a/.gitignore b/.gitignoreindex 32174593..8d81be6e 100644--- a/.gitignore+++ b/.gitignore@@ -3,6 +3,7 @@ # dependencies node_modules/ /.pnp+f,fmfm .pnp.js  # testing(1/1) Stash this hunk [y,n,q,a,d,e,?]?

列出你的暂存

你可以用 git stash list 命令查看你的暂存。暂存是后进先出(LIFO)方式保存的:

$ git stash liststash@{0}: WIP on master: d7435644 Feat: configure graphql endpoint

默认情况下,暂存会显示在你创建它的分支和提交的顶部,被标记为 WIP。然而,当你有多个暂存时,这种有限的信息量并没有帮助,因为很难记住或单独检查它们的内容。要为暂存添加描述,可以使用命令 git stash save <description>

$ git stash save "remove semi-colon from schema"Saved working directory and index state On master: remove semi-colon from schema $ git stash liststash@{0}: On master: remove semi-colon from schemastash@{1}: WIP on master: d7435644 Feat: configure graphql endpoint

检索暂存起来的变化

你可以用 git stash apply 和 git stash pop 这两个命令来重新应用暂存的变更。这两个命令都会重新应用最新的暂存(即 stash@{0})中的改动。apply 会重新应用变更;而 pop 则会将暂存的变更重新应用到工作副本中,并从暂存中删除。如果你不需要再次重新应用被暂存的更改,则首选 pop

你可以通过传递标识符作为最后一个参数来选择你想要弹出或应用的储藏:

$ git stash pop stash@{1}

$ git stash apply stash@{1}

清理暂存

删除不再需要的暂存是好的习惯。你必须用以下命令手动完成:

  • git stash clear 通过删除所有的暂存库来清空该列表。

  • git stash drop <stash_id> 从暂存列表中删除一个特定的暂存。

检查暂存的差异

命令 git stash show <stash_id> 允许你查看一个暂存的差异:

$ git stash show stash@{1}console/console-init/ui/.graphqlrc.yml        |   4 +-console/console-init/ui/generated-frontend.ts | 742 +++++++++---------console/console-init/ui/package.json          |   2 +-

要获得更详细的差异,需要传递 --patch 或 -p 标志:

$ git stash show stash@{0} --patchdiff --git a/console/console-init/ui/package.json b/console/console-init/ui/package.jsonindex 755912b97..5b5af1bd6 100644--- a/console/console-init/ui/package.json+++ b/console/console-init/ui/package.json@@ -1,5 +1,5 @@ {- "name": "my-usepatternfly",+ "name": "my-usepatternfly-2",  "version": "0.1.0",  "private": true,  "proxy": "http://localhost:4000"diff --git a/console/console-init/ui/src/AppNavHeader.tsx b/console/console-init/ui/src/AppNavHeader.tsxindex a4764d2f3..da72b7e2b 100644--- a/console/console-init/ui/src/AppNavHeader.tsx+++ b/console/console-init/ui/src/AppNavHeader.tsx@@ -9,8 +9,8 @@ import { css } from "@patternfly/react-styles"; interface IAppNavHeaderProps extends PageHeaderProps {- toolbar?: React.ReactNode;- avatar?: React.ReactNode;+ toolbar?: React.ReactNode;+ avatar?: React.ReactNode;} export class AppNavHeader extends React.Component&lt;IAppNavHeaderProps&gt;{  render()

签出到新的分支

你可能会遇到这样的情况:一个分支和你的暂存中的变更有分歧,当你试图重新应用暂存时,会造成冲突。一个简单的解决方法是使用 git stash branch <new_branch_name stash_id> 命令,它将根据创建暂存时的提交创建一个新分支,并将暂存中的修改弹出:

$ git stash branch test_2 stash@{0}Switched to a new branch 'test_2'On branch test_2Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: .graphqlrc.ymlmodified: generated-frontend.tsmodified: package.jsonno changes added to commit (use "git add" and/or "git commit -a")Dropped stash@{0} (fe4bf8f79175b8fbd3df3c4558249834ecb75cd1)

在不打扰暂存参考日志的情况下进行暂存

在极少数情况下,你可能需要创建一个暂存,同时保持暂存参考日志(reflog)的完整性。这些情况可能出现在你需要一个脚本作为一个实现细节来暂存的时候。这可以通过 git stash create 命令来实现;它创建了一个暂存条目,并返回它的对象名,而不将其推送到暂存参考日志中:

$ git stash create "sample stash"63a711cd3c7f8047662007490723e26ae9d4acf9

有时,你可能会决定将通过 git stash create 创建的暂存条目推送到暂存参考日志:

$ git stash store -m "sample stash testing.." "63a711cd3c7f8047662007490723e26ae9d4acf9"$ git stash liststash @{0}: sample stash testing..

感谢各位的阅读,以上就是“git的stash命令怎么应用”的内容了,经过本文的学习后,相信大家对git的stash命令怎么应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程之家,小编将为大家推送更多相关知识点的文章,欢迎关注!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Git安装和使用 Git安装和使用 刚开始用git的小白适用,,转自http://www.cnblogs.com/qijunjun/p/7137207.html 实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天就来总结下Git的相关用法,废话不多说,直接开写。 目的:通过Git管理g
fatal: remote origin already exists.解决方法 第一个问题git remote add origin**************fatal: remote origin already exists.(报错远程起源已经存在。)上网查了下,有很多小白遇到过这个问题,以
git常用命令(二)查看历史记录 git log [--pretty=oneline] [ --oneline] / reflog Eniac-W 于 2020-10-18 18:12:38 发布 2368 收藏 3分类专栏: git 文章标签: git版权 git专栏收录该内容10 篇文章0 订阅
git之如何把本地文件上传到远程仓库的指定位置 git专栏收录该内容2 篇文章0 订阅订阅专栏2018.11.26添加内容: 对于自己的仓库,我们建议将远程仓库通过clone命令把整个仓库克隆到本地的某一路径下。这样的话我们从本地向远程仓库提交代码时,就可以直接把需要提交的文件拖到我们之前克隆下来的
代码规范之 lint-staged 在代码提交之前,进行代码规则检查能够确保进入git库的代码都是符合代码规则的。但是整个项目上运行lint速度会很慢,lint-staged能够让lint只检测暂存区的文件,所以速度很快。 安装与配置 安装husky和lint-staged: yarn add hu
方法:1、文件没有git操作时用“git checkout--文件”命令还原;2、文件提交到暂存区时用“git reset HEAD”命令回退当前版本还原;3、文件提交到仓库区时用“git reset HEAD^”命令回退上一个版本还原。 本文操作环境:Windows10系统、Git2.30.0版、
使用Git将本地文件提交到远程仓库 一 操作准备条件: git远程仓库已经建好了,本地文件已经存在了,现在要将本地代码推到git远程仓库保存。 解决办法如下: 1、(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2、把文件添加到版本库中,使用命令
GitHub克隆代码到本地全教程 因为工作原因更换电脑,想要从GitHub上拉取代码的话需要重新配置ssh keys,时间过的久了怕忘记就把步骤给记录下来。 具体步骤: 1.安装git 这我就不说了 2.在TortoiseGit的安装文件中找到 puttygen.exe应用程序 ,默认应该都是 :C
github上传项目的时候报出git@github.com: Permission denied (publickey). fatal: Could not read from remote repo 前言 会不会有程序员小伙伴在刚开始使用github的时候上传项目的时候困难重重,但是又基于自己本身
查看历史 git log --pretty=onelinegit log (然后一直按enter键) 一个是切换根据历史里面的id切换git checkout ID git log 需要不断按enter键出来历史提交记录 git log --pretty=oneline 是直接出来历史记录
Git工作原理及常用命令 欧怼怼发布于&#160;2020-12-08 git介绍 git(读音/ɡɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 git
git git提交项目的具体流程 git项目流程:以下主要有3个角色:负责人、成员A、成员B(若负责人也要修改代码,则负责人同时兼任2个角色:负责人、成员) 主要负责人:搭建项目架构且提交到git上1.github官网登录后,新建仓库,生成地址url,复制线上仓库.git结尾的地址url2.在一个空
git上传项目全部流程 一、下载git 进入网址:https://git-scm.com/downloads; 点击中的Download 2.16.0 for Windows; 在中选择蓝色字段点击,根据电脑64或32位选择适合的下载,点击即可进行下载,下载完成后傻瓜式安装,一直点击下一步即可完成安
Your local changes to the following files would be overwritten by checkout问题的解决 于 2018-07-17 11:38:27 发布 Git 的本地版本管理有三个部分 名称&#x9;说明工作区(Working Directory)&#x9;
Git配置SSH Keys步骤使用教程 1.若是首次安装使用git,先配置用户名称和邮箱(如果有就不需要配置) 打开Git Bash,输入 git config --global user.name &quot;姓名&quot;git config --global user.email &quot
基本配置完成,接下来就是上传你要上传的项目了。 1、初始化git 进入你要上传的项目的文件夹,在文件夹内鼠标右击,选择“Git Bash Here”打开git命令行,输入: $ git init 目的是初始化git,并且会创建个“.git”文件夹,里面有个“config”就是用来保存远程厂库路径地址
本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“gitee如何上传代码”吧! ...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作中,相信很多人在gitee如何下载仓库里的项目问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Gitee上更新代...