V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
theSong
V2EX  ›  程序员

项目在本地写了很久,没有 commit 过,今天打开的时候从很早之前的一个 commit 版本打开了,咋恢复

  •  
  •   theSong · 121 天前 · 4595 次点击
    这是一个创建于 121 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天脑抽,webstorm 打开的时候清了下启动项目那里的缓存,发现代码变成了很久之前的一个版本,git history 是很久之前的了。 能恢复吗?编辑器本身的缓存打开,而不是 git 的某一个版本打开,咋操作?

    第 1 条附言  ·  121 天前
    找到了,谢谢大家🙏
    51 条回复    2021-08-03 08:32:47 +08:00
    Zhuzhuchenyan
        1
    Zhuzhuchenyan   121 天前   ❤️ 1
    看一下 webstorm 的 local history,或许还能救

    没有 stash 的话基本没办法了
    raysonx
        2
    raysonx   121 天前 via iPhone
    git reflog 找找之前的 commit 记录
    raysonx
        3
    raysonx   121 天前 via iPhone
    如果没有 commit 那就没了
    hullopanda
        4
    hullopanda   121 天前
    这每天不 commit 是啥好习惯啊
    尝试恢复 webstorm 的数据,从 windows 磁盘层面去恢复。
    tonytonychopper
        5
    tonytonychopper   121 天前 via iPhone
    每天 commit 才是好习惯
    liuzhaowei55
        6
    liuzhaowei55   121 天前 via Android
    应该随手 commit 就像随手 Ctrl + S 一样
    yitingbai
        7
    yitingbai   121 天前
    一楼说的对, webstorm 自身有文件历史记录, 可以保留一段时间, 可以找回来
    enchilada2020
        8
    enchilada2020   121 天前 via Android
    @liuzhaowei55 如果写了一半没写完的呢 也要 commit 吗?有点强迫症 每次都想把一个完整的写完 一切都干干净净了再 commit 觉得写了一半像草稿的 commit 之后有记录 心里总有疙瘩。。
    yitingbai
        9
    yitingbai   121 天前
    @enchilada2020 提交记录写清楚不就行了, 什么临时保存, **功能尚未完成, 这种强迫症要不得
    Rache1
        10
    Rache1   121 天前
    Local History 也不是万能的 😂

    [Local History]( https://www.jetbrains.com/help/webstorm/local-history.html)

    > Note that Local History is not a replacement for a proper version control for long-term versioning. Local History is cleared when you install a new version of WebStorm. It also has a [retention period]( https://www.jetbrains.com/help/webstorm/local-history.html#local-history-retention) and maximum size, so revisions are not guaranteed to persist.
    512357301
        11
    512357301   121 天前 via Android
    @enchilada2020 commit 的目的就是记录你的思路,开源嘛,让别人也能知道你的代码变动过程。
    一次性完整写完再 commit 大可不必,一次性完整写完我觉得那应该叫发版或者大版本,这里面肯定应该有无数个小版本来支撑的
    raysonx
        12
    raysonx   121 天前 via iPad   ❤️ 1
    @enchilada2020 完整写完后可以把之前的 squash 成一个 commit 再提交
    ClericPy
        13
    ClericPy   121 天前
    wip commit 了解一下...
    ClericPy
        14
    ClericPy   121 天前
    看错了... 已经覆盖了的话只能指望 IDE 自带的撤回了, 我撤回过...
    pengtdyd
        15
    pengtdyd   121 天前
    项目在本地写了很久,没有 commit 过。就这句话我觉的你还真是个人才
    WenhaoWu
        16
    WenhaoWu   121 天前 via Android
    commit --amend 了解一下
    mercury233
        17
    mercury233   121 天前
    我也不喜欢每天 commit 但我会 add
    forgottencoast
        18
    forgottencoast   121 天前   ❤️ 2
    @enchilada2020
    搞一个开发分支,弄好了,合并成一个 commit 也可以解决有强迫症的问题。
    正常是每次完成一个小改动就 commit 。
    中途的临时保存可以用 stash,这个不是 commit 。
    CEBBCAT
        19
    CEBBCAT   121 天前
    听起来有点不合理,是不是打开错项目了?不然的话我怀疑是你没有描述清楚,Intellij 这些都是有自动保存的,比如窗口失焦,更别说关闭程序了。

    清理缓存不可能把代码都清理掉的
    theSong
        20
    theSong   121 天前
    @Zhuzhuchenyan 找着了,还好 stash 了
    theSong
        21
    theSong   121 天前
    @tonytonychopper 你说的对,以后再也不敢了
    theSong
        22
    theSong   121 天前
    @pengtdyd 我错了。。。
    theSong
        23
    theSong   121 天前
    @CEBBCAT 我重新打开了另一个项目,说我这俩项目是同一个,不能同一窗口打开,然后我就同一窗口打开了。。。
    theSong
        24
    theSong   121 天前
    @Rache1 还好是当天的,而且只损失了 nodemodules 里,重新 install 了就好了
    abcysn
        25
    abcysn   121 天前 via iPhone   ❤️ 1
    @enchilada2020 每天提交,最后 rebase 一下把中间的提交干掉
    tonytonychopper
        26
    tonytonychopper   121 天前 via iPhone
    @enchilada2020 这其实就涉及到功能的拆解问题了
    limbo0
        27
    limbo0   121 天前
    最后的机会是开 timemachine, 惨痛的经理
    msg7086
        28
    msg7086   121 天前 via Android
    功能完成的时候重新整理提交不是常规操作么。
    simo
        29
    simo   121 天前
    有 reflog 就 git 恢复,没有只能尝试文件恢复了
    simo
        30
    simo   121 天前
    看到找回了。。。
    liuzhaowei55
        31
    liuzhaowei55   121 天前   ❤️ 1
    @enchilada2020 如果你自己的 feature 分支,并且不会有各种 lint 那就 commit,并且 push,电脑说不定什么情况就阵亡了。
    rationa1cuzz
        32
    rationa1cuzz   121 天前
    没有 add reflog 找不到基本上没戏,长长记性吧
    swaggeek
        33
    swaggeek   121 天前
    @enchilada2020 没写完提交,可以下一次提交的时候用 commit amend 的啊。
    landfill
        34
    landfill   121 天前 via Android
    没写完也 commit 写完了 rebase squash 就可以合并
    Macv1994
        35
    Macv1994   121 天前
    JB 家的 IDE 好像都有 local history 应该可以恢复 我上周也是手贱执行了 git restore app/* 结果第二天打开修改全没了 从 local history 恢复了
    RRRoger
        36
    RRRoger   121 天前
    local history 是个好东西
    acmore
        37
    acmore   121 天前
    @enchilada2020 Commit 本就不是用于搞一个完整的事的,就是 Feature 层面的 Ctrl + S 而已。真正表述一件完整事情的是 Pull-Request / Squashed Commit
    nightwitch
        38
    nightwitch   121 天前
    理解错了 commit 的含义。。commit 并不代表某个功能完成,可以理解成 git 层面的保存文件,完成功能的话应该打 release 包和 tag 了。
    commit 记录可以 squash 的,平时在 dev 分支开发,开发完了以后把所有的更改 squash 一下提交到 master 分支,这样 master 分支始终是干净的,Dev 分支又保留了很多历史记录。
    no1xsyzy
        39
    no1xsyzy   121 天前
    squash 和 WIP commit 都有一个问题:如果后来发现一个 bug 需要 bisect 的话,
    1. squash 只能发现在这一个大提交之中。
    2. WIP 你需要在一堆提交中找到恰当的可用提交。
    这都是不可接受的,所以应当采用细致的功能划分,每次只动一个部分。

    顺便还有一个命令是 git fsck --lost-found
    可能可以找到未提交被 reset 掉的内容。
    xuanbg
        40
    xuanbg   121 天前
    每修一个 bug 或者新加一个功能都要 commit 一次才是好习惯
    ThanksSirAlex
        41
    ThanksSirAlex   120 天前   ❤️ 1
    @enchilada2020 git stash,或者 commit 掉之后再 git reset
    CharAct3
        42
    CharAct3   120 天前
    function gfix(){ git reset --soft HEAD~${1-1} && git commit --amend -C HEAD; }

    加一个这个命令,随时 commit,要 push 前直接 gfix <number> 就可以快速 squash commit 了
    libook
        43
    libook   120 天前
    一个 branch 尽可能包含一个细粒度的 feature 或 fix,可以随时 commit 和 push,合并的时候可以用 rebase 把 branch 的所有 commit 合并为一个 commit 来合并到其他分支上。
    root8080
        44
    root8080   120 天前
    看到这个帖子 吓得我赶紧先 commit 下😅 三天没提交了
    HangoX
        45
    HangoX   120 天前
    试试 vscode 打开试试,jetbrains 有个 bug,会显示缓存,显示和看到不一样
    nacosboy
        46
    nacosboy   120 天前 via iPhone
    随时 commit,最后 push 可以 rebase -i 精简 commit
    theSong
        47
    theSong   120 天前
    @simo 哈哈,是的。补救措施看了这么多,还是养成及时保存的习惯最好
    theSong
        48
    theSong   120 天前
    @nacosboy 好的,谢谢,学到了很多没见过的指令
    theSong
        49
    theSong   120 天前
    @root8080 😄
    theSong
        50
    theSong   120 天前
    @Macv1994 是的,感谢 JB 。。
    theSong
        51
    theSong   120 天前
    @CharAct3 这个命令直接在终端输入吗
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3932 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:50 · PVG 13:50 · LAX 21:50 · JFK 00:50
    ♥ Do have faith in what you're doing.