当前位置: 首页 > 科技观察

面试官:说说你对GitStash的理解?应用场景?

时间:2023-03-19 13:28:44 科技观察

本文转载自微信公众号《JS每日一问》,作者慧慧。转载本文请联系JS每日一问公众号。1.什么是stash,翻译过来就是存储。在git中,可以理解为保存当前的工作进度。它将保存临时存储区和工作区中的更改。这些更改将保存在堆栈中,您可以随时关注它们。分支重新推送更改并重新应用更改的代码默认情况下,gitstash缓存以下状态的文件:暂存更改Git跟踪但尚未添加到阶段未暂存更改但不会缓存以下状态的文件:新文件在工作目录(untrackedfiles)Ignoredfiles(忽略的文件)如果你想让上面的文件被缓存,可以使用-u或者--include-untracked可以使用目录中的新文件,使用-a或者--all命令在当前目录中进行所有更改。2.gitstash的常用命令如下:gitstashgitstashsavegitstashlistgitstashpopgitstashapplygitstashshowgitstashdropgitstashcleargitstash保存当前工作进度,保存修改暂存区和工作区。gitstashsavegitstashsave可用于存储更改。并将git的工作状态切换回HEAD,也就是最后一次合法提交,如果给出了具体的文件路径,gitstash只会处理该路径下的文件。其他文件不会被存储,还有一些参数:--keep-index或-k只会存储为git管理的文件--include-untracked作为被跟踪的文件也会被缓存,当前工作空间将被恢复到一个完全清除状态-a或--all命令可以使当前目录中的所有更改,包括git忽略的文件gitstashlist显示stash进度列表。也就是说,gitstash命令可以执行多次。多次使用gitstash命令时,栈中会充满未提交的代码,如下:其中,stash@{0}和stash@{1}为当前stash名称gitstashpopgitstashpop读取上次从栈中保存的内容,即栈顶的stash会恢复到工作区,也可以通过gitstashpop+stashname恢复。哪个存储被恢复到当前目录?如果restorefromstash与当前目录的内容和当前目录的内容有冲突,则需要手动修复冲突或者新建分支来解决冲突。gitstashapply将堆栈的内容应用到当前目录。与gitstashpop不同的是,该命令不传输内容从栈中删除意味着该命令可以多次将栈中的内容应用到工作目录,适用于多个分支。同理,可以通过gitstashapply+stashnamerestore将哪个stash恢复到当前目录。查看栈中最新保存的stash与当前目录的差异使用gitstashshow-p查看详细差异使用gitstashshowstash@{1}查看指定stash与当前目录git的差异stashdropgitstashdrop+stashnamerepresentation从栈中移除一个指定的stashgitstashclear删除所有存储的进度3.应用场景当你在项目的某个部分工作了一段时间后,一切都进入了混乱状态,并且您想切换到另一个分支或拉下远程代码以执行其他操作,但是您创建了未完成代码的提交提交。这时候就可以使用gitstash了。比如以下场景:当你的开发进行到一半,但是代码你还不想提交,这时候你需要同步关联远程代码。如果你的本地代码和远程代码没有冲突,你可以直接通过gitpull解决,但是如果可能有冲突怎么办。直接gitpull会拒绝覆盖当前的修改,这时候可以依次使用以下命令:gitstashgitpullgitstashpop或者开发到一半现在想修改其他分支问题时,也可以使用gitstash缓存当前区域的代码gitstash:保存开发到一半的代码gitcommit-m'modifyissue'gitstashpop:在最新提交后追加代码