Git——找回丢失的git stash内容

在此之前,先介绍一下git stash~

参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000

通常在项目开发中我们需要经常切换分支,有时手头工作(feature-entryForm分支)还没完成,需要处理一个线上紧急bug(需要在master拉一个新分支处理),这时可以使用git stash将工作现场存起来

 

工作中使用stash的具体步骤

1、查看工作现场

我们的工作现场是这样的,突然,要求我们去处理一个紧急bug,准备切分支啦~

2、储藏工作区,切换分支

切分支之前,我们要使用git stash 将工作区储藏起来(可以通过git stash list查看储藏记录),然后git status查看工作区,会发现工作区已经干净了

$ git stash //储藏工作区
Saved working directory and index state WIP on feature-entryForm: 432811f 修改样式

$ git stash list  //查看储藏记录
stash@{0}: WIP on feature-entryForm: 432811f 修改样式

$ git status  //查看工作区
On branch feature-entryForm
Your branch is up to date with 'origin/feature-entryForm'.

nothing to commit, working tree clean

现在我们可以放心的切换到其他分支(git checkout 分支)修改bug

3、恢复工作区

bug修改结束切回到feature-entryForm分支,恢复工作区继续开发

Git把stash内容存在某个地方了,恢复现场有两个办法:

    (1)用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除,自己试一下吧

    (2)用git stash pop,恢复的同时把stash内容也删了

$ git stash pop //恢复工作区
On branch feature-entryForm
Your branch is up to date with 'origin/feature-entryForm'.

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:   ****/printPage.vue

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (b03aa1f478cd6305086266222035967e7f5a2377) //这个hash值就是commitId

 

好了,切入主题!找回丢失的stash~

如果执行git stash pop之后将恢复的内容被手动删掉了(比如手贱点了vsCode的Discart All Changes,刚恢复的所有东西都消失了~~)

由于git stash pop恢复的同时把stash内容也删掉, 所以stash list不再会有之前的stash。

但是git stash pop出的change是可以找回的,因为每次git stash都会生成一个新的commit,只要知道commitID, 通过git stash apply commitID 就可以应用之前的stash

寻找commitID有两种方法:

    1、git stash pop 最后会打印出pop掉的commitid值,若这个记录还存在直接使用即可。

     2、git fsck --lost-found, 会打印出所有dangling commit,

$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
Checking objects: 100% (4562/4562), done.
dangling commit 72c4bb5a3ab0a92365ce980995989287d3439ef8
dangling commit cfc49fab5d0cbd8f4e77436c3fec9765d5671e02
dangling commit 4307d584e51b7ea1ba86e1d7d78939574f0926cd
dangling commit 4fcb2b69158076d497525329074cca30a624ee05
dangling commit a391c6ac3a0183fd6e2b744fde22c7ec7ad66626
dangling blob 5b52f24618b8b540fa3d3c6261e8cb006874ae70
dangling commit d4d3468978aed5892a9e0fdf5a3ce608504282c2
dangling commit 3b95cd4082116dc2953a851a895d7e032465c2f7
dangling commit 531507f3cd623631d8e4be3d04a56358a941a233
dangling commit 8ed61b6cf5cdd6540a3bf90b1502e8d22138f54c
dangling blob b19641ad3a411d9ac5b1cb93ae7ded554e82b5a3
dangling commit b9160d042062a6d0d2d4f2f345aa7b8be3bf69c5
dangling blob a3d8d7e28a71f2fbe4b12e49e153b81d150e97c2
dangling blob 7ad9c08153d8a10231154762f4ad4e27713f373a
dangling blob c9997ccc838e3afbdd037bf14ffb6f3556da774a
dangling blob 5a9c010230133acb5b30385c751f3dbf2fff5546
dangling commit db1d1c5cfdc2cb984f4b6dfd204ea36c5ecad2d8
dangling commit 661f6dc28e9e943befbf0976bc8792f72d4924ff
dangling commit 6da010556e82c660788a2fd0446b1a849b4b20d7
dangling commit 71231d5518ebe0d74811db66b24730385f9f1ce6
dangling blob c9a4bd6ca1f2fe1c1d08ca2f08f11e23f104a404
dangling blob b6a9bad4d1300a02e711034ff89b9d00c6b84032
dangling commit 6f6cd311bd6dc65ad288c8e542c6d199985b1523
dangling commit ba7897b57a50fd124a036ada7cadb74c2f10e544
dangling commit b03aa1f478cd6305086266222035967e7f5a2377
dangling commit edba304705444e8e55d8d5def788a7fb38d13059
dangling commit f5fb9c6f54d5951dabee9fe3abb5baa8e15869d5
dangling blob 4c3e71c914f02665bc008d03a5c401aa8a8e1094

这里面大概有三种类型的内容,blobtreecommit。我们这样看的话是看不出任何有用信息的,我们需要另外一条命令将其内容show出来。git show commitId

但是这些id所对应的记录并不是有序的,如果想要找到之前误删的内容,需要我们一条条的去show出这些内容,然后判断是否是要找回的。可以关注以下两点内容,快速找出你需要的commitId:

(1)修改内容

(2)日期

找到commitID之后就去执行git stash apply commitID恢复你的工作区吧~

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值