Git 使用 stash暂存代码

Git Stash 是一个实用功能,用于临时保存未完成的修改,以便切换到其他分支处理紧急问题。通过 `git stash` 命令,你可以将工作区和暂存区的改动储藏起来,之后使用 `git stash apply` 或 `git stash pop` 恢复。`git stash list` 查看储藏列表,`git stash drop` 删除最近的储藏,`git stash clear` 清除所有储藏。在多个分支间切换时,stash 可帮助保持工作区整洁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你修改了代码没有commit提交本地库,git拒绝你切换分支。 如果我们不想提交不完善的代码,但是得去修改一个紧急Bug,此时 stash 可将当前未提交到本地仓库的代码,储藏(stash)到Git的栈中,而不是仓库中。stash后工作区和上次提交的内容是一样的,工作区变干净了,等我们修完Bug,提交并push到远端仓库后,再使用git stash apply或者pop命令,将以前完成一半的工作区恢复回来。stash 常用在修改代码过程中,切换到其他分支去的时候。stash可以把当前工作区的修改“保存”起来,以后用git stash pop 恢复现场。stash是本地的,不会传到远端仓库上。

储藏到git栈中

git stash 

git stash命令会将工作区和暂存区的修改储藏(stash)到Git的堆栈中,同时建立一条说明信息,默认是最后一次提交的节点号。

git stash save  ‘注释说明信息’

git stash save [stashMessage]

git stash save ‘说明信息’ 是自定义说明信息,比较 git stash  多些了一点命令。它们效果一样,说明信息更加利于了解stash的内容。

应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令。示例如下:

$ git stash save   "test-cmd-stash"
Saved working directory and index state On autoswitch: test-cmd-stash
HEAD 现在位于 296e8d4 remove unnecessary postion reset in onResume function

$ git stash list
stash@{0}: On autoswitch: test-cmd-stash

顺序执行git stash save “test1”和git stash save “test2”命令,效果如下:

$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1

查看git栈中stash库里信息

git stash list

列出当前仓库下所有的stash条目,每一条stash用stash@{n}标识。

$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1

$ git stash list
stash@{0}: WIP on chatOptimize: e454bdde 预览图片切换不跳动居中
stash@{1}: On runShotCut: 44

stash信息格式:
stash@{index}: WIP on [分支名]: [最近一次的commitID] [最近一次的提交信息]

一个典型的输出如下:

$ 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 show stash@{n}

当有多条记录并且过了一段时间忘记stash内容时通过该命令可以查看stash的具体内容

恢复工作区

恢复最近的储藏(stash)到工作区

通过git stash pop取出最近一次储藏的修改到工作区,而通过查看储藏列表的index的可以取出指定储藏中的修改到工作区

git stash pop   

git stash pop可取出最近一次储藏的修改,恢复到工作区中,并同时将该储藏从储藏记录列表中删除

$ git stash pop

git stash pop命令将stash的内容从git栈中弹出, 恢复之前的工作区修改 。默认弹出最上面的那条,即stash@{0}。

注:该命令将堆栈中最近保存的内容删除 。

$ git stash list
stash@{0}: WIP on chatOptimize: e454bdde 预览图片切换不跳动居中
stash@{1}: On runShotCut: 44

stash是多个分支在本地混合储藏的,不是说在某个分支上,stash pop 出来的就是当前分支的最顶上的stash储藏。如果多个分支都有stash,那么在提取stash的时候就有指定提取stash的{n}标识。

恢复指定的储藏(stash)到工作区

此外还可以在pop后加stash@{n}来指定要弹出的项目:恢复指定的进度到工作区。
 n是通过git stash list命令得到的

git stash pop stash@{1}

git stash apply

git stash apply将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会从堆栈中删除stash储藏。

$ git stash apply
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   src/main/jarwerwerwe.java

no changes added to commit (use "git add" and/or "git commit -a")

$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1
 
堆栈中的内容并没有删除。 


git stash apply命令可以通过名字指定使用哪个stash,默认使用最近的stash(即stash@{0})。

# 取出指定index的储藏的修改到工作区中
git stash apply stash@{index} 

删除stash

git stash drop 

使用git stash drop命令删除最近的一个储藏

$ 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},此外还可以在drop后加stash@{n}来指定要丢弃的stash条目。

删除指定的储藏

git stash drop stash@{index}
$ git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)

清除所有的stash

git stash clear

使用git stash clear命令,删除所有缓存的stash。


 

使用Git时,可以使用"git stash"命令来暂存修改的代码。这个命令有两个常用的选项。首先是"git stash"命令,它会将当前的修改保存到一个临时区域,同时将工作目录恢复到上一次提交的状态。接着是"git stash apply"命令,它可以用来恢复之前暂存的修改。当你使用"git stash apply"命令时,Git会尝试将最近一次的暂存修改应用到当前分支上。如果应用成功,你的修改将被恢复并添加到工作区中。如果你想要查看当前的修改状态,可以使用"git status"命令。如果当前没有任何修改,Git会显示"no changes added to commit"的提示信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Git系列之暂时保存更改](https://blog.csdn.net/weixin_62277266/article/details/127836849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Git 使用 stash暂存代码](https://blog.csdn.net/panjunnn/article/details/115117461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值