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

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

  •  
  •   theSong · 2021-08-01 20:47:53 +08:00 · 5810 次点击
    这是一个创建于 1211 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2021-08-02 09:44:10 +08:00
    找到了,谢谢大家🙏
    51 条回复    2021-08-03 08:32:47 +08:00
    Zhuzhuchenyan
        1
    Zhuzhuchenyan  
       2021-08-01 20:58:26 +08:00   ❤️ 1
    看一下 webstorm 的 local history,或许还能救

    没有 stash 的话基本没办法了
    raysonx
        2
    raysonx  
       2021-08-01 21:22:18 +08:00 via iPhone
    git reflog 找找之前的 commit 记录
    raysonx
        3
    raysonx  
       2021-08-01 21:22:42 +08:00 via iPhone
    如果没有 commit 那就没了
    hullopanda
        4
    hullopanda  
       2021-08-01 21:26:03 +08:00
    这每天不 commit 是啥好习惯啊
    尝试恢复 webstorm 的数据,从 windows 磁盘层面去恢复。
    tonytonychopper
        5
    tonytonychopper  
       2021-08-01 21:39:53 +08:00 via iPhone
    每天 commit 才是好习惯
    liuzhaowei55
        6
    liuzhaowei55  
       2021-08-01 21:44:19 +08:00 via Android
    应该随手 commit 就像随手 Ctrl + S 一样
    yitingbai
        7
    yitingbai  
       2021-08-01 21:49:02 +08:00
    一楼说的对, webstorm 自身有文件历史记录, 可以保留一段时间, 可以找回来
    enchilada2020
        8
    enchilada2020  
       2021-08-01 21:56:18 +08:00 via Android
    @liuzhaowei55 如果写了一半没写完的呢 也要 commit 吗?有点强迫症 每次都想把一个完整的写完 一切都干干净净了再 commit 觉得写了一半像草稿的 commit 之后有记录 心里总有疙瘩。。
    yitingbai
        9
    yitingbai  
       2021-08-01 21:58:10 +08:00
    @enchilada2020 提交记录写清楚不就行了, 什么临时保存, **功能尚未完成, 这种强迫症要不得
    Rache1
        10
    Rache1  
       2021-08-01 22:03:08 +08:00
    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  
       2021-08-01 22:04:58 +08:00 via Android
    @enchilada2020 commit 的目的就是记录你的思路,开源嘛,让别人也能知道你的代码变动过程。
    一次性完整写完再 commit 大可不必,一次性完整写完我觉得那应该叫发版或者大版本,这里面肯定应该有无数个小版本来支撑的
    raysonx
        12
    raysonx  
       2021-08-01 22:09:17 +08:00 via iPad   ❤️ 1
    @enchilada2020 完整写完后可以把之前的 squash 成一个 commit 再提交
    ClericPy
        13
    ClericPy  
       2021-08-01 22:22:57 +08:00
    wip commit 了解一下...
    ClericPy
        14
    ClericPy  
       2021-08-01 22:23:22 +08:00
    看错了... 已经覆盖了的话只能指望 IDE 自带的撤回了, 我撤回过...
    pengtdyd
        15
    pengtdyd  
       2021-08-01 22:39:20 +08:00
    项目在本地写了很久,没有 commit 过。就这句话我觉的你还真是个人才
    WenhaoWu
        16
    WenhaoWu  
       2021-08-01 23:02:46 +08:00 via Android
    commit --amend 了解一下
    mercury233
        17
    mercury233  
       2021-08-01 23:03:45 +08:00
    我也不喜欢每天 commit 但我会 add
    forgottencoast
        18
    forgottencoast  
       2021-08-01 23:15:20 +08:00   ❤️ 2
    @enchilada2020
    搞一个开发分支,弄好了,合并成一个 commit 也可以解决有强迫症的问题。
    正常是每次完成一个小改动就 commit 。
    中途的临时保存可以用 stash,这个不是 commit 。
    CEBBCAT
        19
    CEBBCAT  
       2021-08-02 00:00:25 +08:00
    听起来有点不合理,是不是打开错项目了?不然的话我怀疑是你没有描述清楚,Intellij 这些都是有自动保存的,比如窗口失焦,更别说关闭程序了。

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

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

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