了解如何使用gitstash命令,以及何时应该使用它。版本控制是软件开发人员日常生活中不可或缺的一部分。很难想象一个开发软件的团队不使用版本控制工具。也很难想象没有使用(或听说过)Git的开发人员。在2018年Stackoverflow开发者调查中,74,298名参与者中有87.2%使用Git进行版本控制。LinusTorvalds在2005年创建了Git来开发Linux内核。本文介绍了gitstash命令并探索了一些用于暂存更改的有用选项。本文假设您对Git概念有基本的了解,并且对工作树、暂存区和相关命令有很好的理解。为什么gitstash很重要?首先要理解为什么在Git中暂存更改很重要。假设Git没有暂存更改的命令。当你在一个有两个分支(A和B)的存储库上工作时,这两个分支已经分叉了一段时间并且有不同的头部。当你在分支A上处理一些文件时,你的团队要求你修复分支B上的错误。你快速将更改保存到分支A(但不提交),并尝试使用gitcheckout检出分支BB.Git立即中止操作,抛出错误:“您对以下文件的本地更改将被此检出覆盖...请在切换分支之前提交您的更改或暂存它们。”在这种情况下,有几种方法可以启用分支切换:在分支A中创建一个提交,提交并推送您的更改以修复B中的错误,然后再次检出A,并运行gitresetHEAD^以恢复您的更改。手动保留Git未跟踪的文件中的更改。第二种方法是个坏主意。第一种方法虽然在外观上很传统,但不太灵活,因为保存未完成工作的修改被视为检查点,而不是仍在进行中的补丁。这正是gitstash设计的场景。gitstash在本地保存未提交的更改,允许您进行更改、切换分支和其他Git操作。然后,当您需要时,您可以重新应用这些存储的更改。暂存是本地范围的,不会被gitpush推送到远程。如何使用gitstash以下是使用gitstash时应遵循的顺序:将更改保存到分支A。运行混帐存储。查看分支B。修复B分支中的错误。提交并(可选)推送到远程。检查分支A并运行gitstashpop以取回隐藏的更改。gitstash将您的更改存储到本地工作目录(在项目的.git目录中,准确地说是/.git/refs/stash),并允许您在需要时检索这些更改。当您需要在不同的上下文之间切换时,它很方便。它允许您保存以后可能需要的更改,并且是在保持更改完好无损的同时保持工作目录清洁的最快方法。如何创建存储暂存更改的最简单命令是gitstash:$gitstashSavedworkingdirectoryandindexstateWIPonmaster;d7435644专长:配置graphql端点默认情况下,gitstash存储(或称其为“Stage”)未提交的更改(暂存和未暂存文件),并忽略未跟踪和忽略的文件。通常,您不需要暂存未跟踪和忽略的文件,但有时它们会干扰您在代码库中执行的其他操作。您可以使用其他选项告诉gitstash处理未跟踪和忽略的文件:gitstash-u或gitstash--includ-untracked来存储未跟踪的文件。gitstash-a或gitstash--all存储未跟踪和忽略的文件。要存储特定文件,您可以使用gitstash-p或gitstash-patch命令:$gitstash--patchdiff--gita/.gitignoreb/.gitignoreindex32174593..8d81be6e100644---a/.gitignore+++b/.gitignore@@-3,6+3,7@@#dependenciesnode_modules//.pnp+f,fmfm.pnp.js#testing(1/1)把这个hunk[y,n,q,a,d,电子,?]?列出你的藏匿处你可以使用gitstashlist命令来查看你的藏匿处。暂存存储后进先出(LIFO):$gitstashliststash@{0}:WIPonmaster:d7435644Feat:configuregraphqlendpoint默认情况下,stash将出现在分支的顶部并提交你创建的地方它,被标记为WIP。但是,当您有多个藏品时,这种有限的信息量无济于事,因为很难单独记住或检查它们的内容。要向存储添加描述,可以使用命令gitstashsave:$gitstashsave"removesemi-colonfromschema"保存的工作目录和索引状态在master上:从模式中删除分号$gitstashliststash@{0}:在master上:从schemastash@{1}中删除分号:在master上的WIP:d7435644Feat:配置graphql端点检索临时存储的更改您可以使用gitstashapply和gitstashpop这两个命令重新应用阶段性变化。这两个命令都将重新应用来自最新存储(即stash@{0})的更改。apply重新应用更改;pop将暂存的更改重新应用到工作副本并将它们从暂存中删除。如果您不需要再次重新应用暂存更改,则首选pop。您可以通过将标识符作为最后一个参数传递来选择要弹出或应用的存储:$gitstashpopstash@{1}或$gitstashapplystash@{1}cleanstashremovesstashnolongerneeded是一个好习惯.您必须使用以下命令手动执行此操作:gitstashclear通过删除所有存储库来清除列表。gitstashdrop从存储列表中删除特定的存储。检查隐藏的差异命令gitstashshow允许您查看隐藏的差异:$gitstashshowstash@{1}console/console-init/ui/.graphqlrc.yml|4+-控制台/控制台-init/ui/generated-frontend.ts|742+++++++++--------控制台/控制台初始化/ui/package.json|2+-对于更详细的差异,需要传递--patch或-p标志:$gitstashshowstash@{0}--patchdiff--gita/console/console-init/ui/package.jsonb/console/console-init/ui/package.jsonindex755912b97..5b5af1bd6100644---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--gita/console/console-init/ui/src/AppNavHeader.tsxb/console/console-init/ui/src/AppNavHeader.tsxindexa4764d2f3..da72b7e2b100644---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";interfaceIAppNavHeaderPropsextendsPageHeaderProps{-toolbar?:React.ReactNode;-avatar?:React.ReactNode;+toolbar?:React.ReactNode;+avatar?:React.ReactNode;}exportclassAppNavHeaderextendsReact.Component{render()Checkouttonewbranch你可能会遇到这样的情况:A分支与您的暂存中的更改不同,当您尝试重新应用暂存时会导致冲突一个简单的解决方法是使用gitstashbranch命令,这将基于创建存储时的提交创建一个新分支,并弹出存储中的更改:$gitstashbranchtest_2stash@{0}切换到一个新分支'test_2'在分支test_2未暂存提交的更改:(使用“gitadd...”更新将要提交的内容)(使用“gitrestore...”到丢弃工作目录中的更改)修改:.graphqlrc.ymlmodified:generated-frontend.tsmodified:package.json没有更改添加到提交(使用“gitadd”和/或“gitcommit-a”)丢弃的stash@{0}(fe4bf8f79175b8fbd3df3c4558249834ecb7)innotStagingwithoutdisturbingthescratchreferencelog在极少数情况下,您可能需要在保持临时引用日志(reflog)完整性的同时创建临时文件。当您需要将脚本作为实现细节暂存时,可能会出现这些情况。这可以通过gitstashcreate命令来实现;它创建一个存储条目并返回其对象名称而不将其推送到存储参考日志:$gitstashcreate"samplestash"63a711cd3c7f8047662007490723e26ae9d4acf9有时,您可能会决定将通过gitstashcreate创建的存储条目推送到存储参考日志:$gitstashstore-m"samplestashtesting..""63a711cd3c7f8047662007490723e26ae9d4acf9"$gitstashliststash@{0}:samplestashtesting..结论我希望这篇文章对你有用并学到了新东西。