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

临下班前不小心把一天写的代码都删了

  •  1
     
  •   sneezry ·
    Sneezry · 2017-04-06 20:55:38 +08:00 · 11116 次点击
    这是一个创建于 2548 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写了一天的代码没 git add ,创建一个新的分支后用 rm -rf *清掉了从 master 继承过来的全部代码,准备写入新的代码。当切回 master 时,发现整个世界都静止了(手动微笑

    用了两个多小时把这一天写的代码又都回想起来并调试成功,终于长舒了一口气。

    你说我手贱不贱?

    贱。
    95 条回复    2017-04-11 09:08:48 +08:00
    cinhoo
        1
    cinhoo  
       2017-04-06 21:05:55 +08:00 via iPhone   ❤️ 27
    这时候 intellij 的 local history 就很有用了。
    xmh51
        2
    xmh51  
       2017-04-06 21:08:56 +08:00
    这时候体现了代码放网盘同步文件夹的重要性
    changwei
        3
    changwei  
       2017-04-06 21:10:26 +08:00
    好气啊!!!
    NonClockworkChen
        4
    NonClockworkChen  
       2017-04-06 21:11:13 +08:00
    已感谢,浪费了你的 2 小时,拯救了 2 小时*n....
    guokeke
        5
    guokeke  
       2017-04-06 21:17:46 +08:00
    既视感强烈
    moonman
        6
    moonman  
       2017-04-06 21:27:09 +08:00
    我能怎么办我也很绝望啊
    yangqi
        7
    yangqi  
       2017-04-06 21:29:33 +08:00   ❤️ 3
    回家睡一觉,假装今天不存在,明天重新开始
    minamike
        8
    minamike  
       2017-04-06 21:29:52 +08:00 via iPhone   ❤️ 4
    充分证明 deadline 是第一生产力
    ZSeptember
        9
    ZSeptember  
       2017-04-06 21:30:09 +08:00
    今天差点就这么干了。
    markx
        10
    markx  
       2017-04-06 21:30:23 +08:00
    说明流程还可以改善一下。
    leisurelylicht
        11
    leisurelylicht  
       2017-04-06 21:32:17 +08:00
    我今天也干了这么一把, 还好找回一个调试时留下的编译文件,还原出代码以后就下班了,心累。。。
    mahone3297
        12
    mahone3297  
       2017-04-06 21:32:47 +08:00   ❤️ 4
    说明你今天工作量非常不饱满,其实 2h 就搞定了。。。
    zmj1316
        13
    zmj1316  
       2017-04-06 21:35:29 +08:00
    真巧,我今天也把前几天的代码删了,是因为 merge 错 branch 了,结果 revert 的时候选了 hard ,把没 commit 的也一起 revert 了...
    ooxxcc
        14
    ooxxcc  
       2017-04-06 21:41:58 +08:00   ❤️ 3
    mac 上有 timemachine 每小时备份
    linux 上有 btrfs + snapper 每小时一个 snapshot

    出问题顶多丢一个小时的东西……

    当然,除非 btrfs (又)炸了……
    xdream86
        15
    xdream86  
       2017-04-06 21:42:13 +08:00
    干过同样傻事+1
    greatghoul
        16
    greatghoul  
       2017-04-06 21:45:24 +08:00
    干过同样的傻事 +1
    NonClockworkChen
        17
    NonClockworkChen  
       2017-04-06 21:52:50 +08:00
    @ooxxcc 这是 CentOS 的独有功能吗,Ubuntu 非 btrfs....有替代方案吗...
    searene
        18
    searene  
       2017-04-06 21:53:41 +08:00   ❤️ 1
    我也干过类似的事情,用 intellij 的 local history 找回来了
    xioyan
        19
    xioyan  
       2017-04-06 21:54:50 +08:00
    这个没做过,不过就是写论文的时候忘记了保存而已
    mritd
        20
    mritd  
       2017-04-06 21:55:50 +08:00 via iPhone
    @NonClockworkChen 不是 centos 专有的,是一个 linux 分区格式,类似 ext4 一样,出现的目的就是为了弥补当前一些文件系统的缺陷
    crab
        21
    crab  
       2017-04-06 21:56:07 +08:00
    不能明天上班再写一次吗 = =!
    ooxxcc
        22
    ooxxcc  
       2017-04-06 21:56:17 +08:00
    @NonClockworkChen 不是 CentOS ,我用的 archlinux ……只要文件系统是 btrfs 就行, snapper 自己可以装

    替代方案没考虑过……新挂个分区 /镜像格式化成 btrfs/zfs 这类支持 snapshot 的文件系统就好……
    jimmy66
        23
    jimmy66  
       2017-04-06 21:56:18 +08:00 via iPhone
    心疼一波前辈😂
    vingz
        24
    vingz  
       2017-04-06 21:56:32 +08:00   ❤️ 3
    所以用 git rm 命令,不要用 rm -rf
    或者用 git clean 命令,
    git 库管理尽量使用 git 命令,可以在 reflog 里回退
    cinhoo
        25
    cinhoo  
       2017-04-06 21:58:43 +08:00   ❤️ 1
    @NonClockworkChen #17 btrfs 有提供工具( btrfs-convert )将 ext{3, 4}转换成 btrfs 。但 snapper 在 arch 上一直报权限错误,最后用的这个 https://github.com/jf647/btrfs-snap
    ooxxcc
        26
    ooxxcc  
       2017-04-06 22:12:42 +08:00
    @cinhoo 我之前也用这个,后来觉得还是 snapper 灵活一点,供参考
    权限错误怎么说……没碰到
    qk3z
        27
    qk3z  
       2017-04-06 22:24:44 +08:00 via Android
    我已经干过两次了-_-
    bp0
        28
    bp0  
       2017-04-06 22:26:25 +08:00
    我也干过一次,充分说明设计才是最费时间的。码代码真的跟搬砖一样是体力活。
    cinhoo
        29
    cinhoo  
       2017-04-06 22:28:36 +08:00
    @ooxxcc #26 直接命令行创建 snapshot 是没问题的,但是 cron 创建的时候就报 No Permission 。要说是 cron 的问题好像也不是, snapper 和 btrfs-snap 的任务都是放在 cron.{hourly,day...}下的。后面直接用了 btrfs-snap ,不管了。
    ydxred
        30
    ydxred  
       2017-04-06 22:35:19 +08:00   ❤️ 1
    有一个周六的晚上!我写了一个晚上的文章 要发博客的!因为电脑开的程序比较多...在四点的时候电脑死机了!只有重启电脑才能好!你们都知道 simplemde 吧!博客的富文本编辑器就会他!没有自动保存的功能那种!我当时的内心你们可能感受不到!写到半夜四点啊 没了!后来我学聪明了 在简书写 !写了在复制到我博客上 ....
    yruite
        31
    yruite  
       2017-04-06 22:39:10 +08:00
    我想起一个笑话:一个小蝌蚪拼命地游啊游,打败了所有的对手,到达终点时发现只是一张纸巾
    v2xeuser
        32
    v2xeuser  
       2017-04-06 22:45:43 +08:00
    这种错误我应该不会再犯 理论上
    taozhijiangscu
        33
    taozhijiangscu  
       2017-04-06 22:46:35 +08:00
    昨天干了类似的事情,原来打算删调试机上代码的,结果把开发机上的代码删掉了。

    幸亏我机制将代码放到 Dropbox 可以触及的地方。

    话说现在 Dropbox 改版了,误删的文件恢复起来更便捷了
    morewe
        34
    morewe  
       2017-04-06 22:47:14 +08:00
    刚工作的时候曾经把我和一个同事 2 , 3 天的代码给删了,囧。
    Archangel_SDY
        35
    Archangel_SDY  
       2017-04-06 22:47:21 +08:00   ❤️ 4
    曾经花 2h 魔改一个程序,费好大劲把编译错误都修完,一运行,然后这货就把自己目录连同自己都删了...
    singer
        36
    singer  
       2017-04-06 23:07:13 +08:00 via iPhone
    线上线下两台服务器配置一模一样,线上是绝对不用 rm -rf./*的,昨天早上上班,手滑点错 shell 界面了,连到线上去了。
    而且手滑,/不知道为啥没输入,你猜怎么样吧。
    快照回退到一星期前,线下版本部署上去。差点吓晕过去。。。。
    bombless
        37
    bombless  
       2017-04-06 23:42:31 +08:00 via Android
    ……从来不需要 rm *,不过试过用 git clean 时犯类似的错(
    HuangLibo
        38
    HuangLibo  
       2017-04-07 00:01:16 +08:00
    sudo rm -rf / 是一个更强大的命令, 楼主可以试试.
    hanqian
        39
    hanqian  
       2017-04-07 00:25:10 +08:00 via Android   ❤️ 1
    花两个小时回忆起代码 不等于 创作代码只需要两小时,这应该不难理解吧,就像你写一篇文章要一个小时,复述这篇文章可能只要 5 分钟
    bazingaterry
        40
    bazingaterry  
       2017-04-07 00:26:42 +08:00
    干过同样的傻事 +1
    DioV
        41
    DioV  
       2017-04-07 00:27:36 +08:00
    (手动滑稽
    sheep3
        42
    sheep3  
       2017-04-07 00:30:04 +08:00
    干过...... 不过多亏了 idea
    ljcarsenal
        43
    ljcarsenal  
       2017-04-07 01:04:46 +08:00
    微软也用 linux ?
    msg7086
        44
    msg7086  
       2017-04-07 01:19:41 +08:00
    没遇到过这种破事。自以为没信心手工跑 Git ,所以都让工具帮我做,省心。
    libook
        45
    libook  
       2017-04-07 01:27:08 +08:00   ❤️ 1
    请养成下列习惯:
    勤开分支
    写完一个小模块或小改动就马上提交
    勤推送提交和分支

    push 禁止加--force
    reset 禁止加--hard
    commit 禁止加-a



    话说实际上 git 的每一个提交都应该是明确的“一件事”,写一天的代码如果能拆成几件事的话就最好及时分几次提交,而不是等一天甚至几天写完再提交,任何工作都应该新开一个分支进行开发和提交,因为保不齐会尝试多种方案以及对原分支的紧急修改上线。
    icylogic
        46
    icylogic  
       2017-04-07 04:02:54 +08:00
    一直在 Dropbox 里写代码
    为什么都这么喜欢 rm -rf ,用回收站多好 ……
    ryd994
        47
    ryd994  
       2017-04-07 04:25:27 +08:00 via Android   ❤️ 1
    看成了临下班前一天把代码全删了
    还以为离职前一天删代码跑路
    lsmgeb89
        48
    lsmgeb89  
       2017-04-07 06:24:20 +08:00
    rm 可以找回来的,很容易。

    但是有一次我误把代码覆盖了,真找不回来了。

    用的 Perforce ,不是 Git
    darrenfang
        49
    darrenfang  
       2017-04-07 07:00:40 +08:00 via iPhone
    试试这个命令 git fsck --lost-found ,没 add 的不知道能不能找回
    xiaket
        50
    xiaket  
       2017-04-07 07:01:59 +08:00
    ~/.vim/backup 救了我若干次
    maguowei
        51
    maguowei  
       2017-04-07 07:43:48 +08:00
    intellij 的 local history +1
    dinghua
        52
    dinghua  
       2017-04-07 08:05:02 +08:00
    祸兮福所倚, 说不定再写一遍代码质量会更高呢
    reHuo
        53
    reHuo  
       2017-04-07 08:40:52 +08:00
    local history +1
    Mutoo
        54
    Mutoo  
       2017-04-07 08:47:35 +08:00
    有 local history ,即使删除掉关机重启都不怕。
    mcds
        55
    mcds  
       2017-04-07 08:48:19 +08:00
    这事儿我也干过,当时文件系统是 ext3 ,想用 extundelete 恢复必须得 unmount 硬盘,公司不让 unmount (老爷机,上次重启硬盘就挂了),最后跟楼主一样,花了两个小时又重新写了一遍...
    discrete
        56
    discrete  
       2017-04-07 08:48:32 +08:00 via iPad
    这时候安利一下我的项目:

    https://github.com/alanzchen/rm-protection

    因为 GitLab 误删事故而造出来的东西。
    chinawrj
        57
    chinawrj  
       2017-04-07 09:05:53 +08:00
    竟然不是写一段代码提交一段代码。也是醉了。
    chinawrj
        58
    chinawrj  
       2017-04-07 09:06:52 +08:00
    不是手贱的问题啊,是习惯问题。谁也不能保证自己在关键时候不出错,所以只能过一段时间提交一次,把损失降到最低。
    lrh3321
        59
    lrh3321  
       2017-04-07 09:08:38 +08:00
    中午吃饭前不提交一次?
    yang2yang
        60
    yang2yang  
       2017-04-07 09:11:54 +08:00
    程序员的日常
    ooxxcc
        61
    ooxxcc  
       2017-04-07 09:16:42 +08:00
    @cinhoo 微妙,反正能用就行,不管了……
    zxq1002
        62
    zxq1002  
       2017-04-07 09:18:33 +08:00 via Android
    @zmj1316 已经 commit 过不用怕, git reflog
    nameldk
        63
    nameldk  
       2017-04-07 09:24:44 +08:00
    Local History 分分钟找回。
    SummerWQM
        64
    SummerWQM  
       2017-04-07 09:26:04 +08:00
    commit 啊
    Clarencep
        65
    Clarencep  
       2017-04-07 09:26:22 +08:00
    以前干过类似这种的蠢事,还好 IdeaJ 有 Local history. 现在用 vscode 的时候果断也装了个 local history 的插件
    deepzz
        66
    deepzz  
       2017-04-07 09:28:19 +08:00
    rm -rf *是什么鬼,为什么会有这个操作
    lwbjing
        67
    lwbjing  
       2017-04-07 09:34:51 +08:00
    曾经为了这事儿,我加了一整个周末的班。。
    licraft
        68
    licraft  
       2017-04-07 09:38:41 +08:00
    git 好像有回退执行过的指令的功能的
    wizardoz
        69
    wizardoz  
       2017-04-07 09:53:51 +08:00
    没关系,写过的代码重写一遍会更整洁。
    zzczzc
        70
    zzczzc  
       2017-04-07 10:01:49 +08:00
    我也被 intellij 的 local history 拯救过
    blacklee
        71
    blacklee  
       2017-04-07 10:05:45 +08:00
    习惯不好。
    我用最简单的 VIM+git ,几年了也没出这样的事。
    不过前几天我把自己的数据库数据改错了,气得我几天没干活,一直在反思。
    jkneedout
        72
    jkneedout  
       2017-04-07 10:08:24 +08:00 via iPhone
    yujieyu7
        73
    yujieyu7  
       2017-04-07 10:33:57 +08:00
    没事一定要 add commit push 一下啊
    waye
        74
    waye  
       2017-04-07 10:45:08 +08:00
    曾经把写了一个月的代码 del 掉了, 花了一个星期 恢复出来, 23333333
    lyragosa
        75
    lyragosa  
       2017-04-07 10:45:55 +08:00
    local history 再次立功!
    fan1234nm
        76
    fan1234nm  
       2017-04-07 10:47:07 +08:00
    Local History 分分钟找回啊
    fds
        77
    fds  
       2017-04-07 10:49:16 +08:00
    所以要随时 commit 呀。嫌历史不好看,提交前 rebase -i 整理成一个就好了嘛。
    justfindu
        78
    justfindu  
       2017-04-07 10:53:47 +08:00
    我前几天也做了这个事儿 切回分支然后懵逼
    justfindu
        79
    justfindu  
       2017-04-07 11:00:14 +08:00
    神器啊~ local history 再次立功了
    zacard
        80
    zacard  
       2017-04-07 11:31:57 +08:00
    idea local history
    reus
        81
    reus  
       2017-04-07 12:56:15 +08:00
    zfs 或者 btrfs + 自动 snapshot 。
    我是 5 分钟一次,所以丢也只会丢 5 分钟内的。
    yuyu2140
        82
    yuyu2140  
       2017-04-07 13:08:53 +08:00
    local history +10086 次拯救
    ShadowsocksR18
        83
    ShadowsocksR18  
       2017-04-07 13:33:20 +08:00
    我上一个单位,还有管理员辞职前在 SVN 上删了一个月的代码呢……
    8355
        84
    8355  
       2017-04-07 13:38:34 +08:00
    local history 真的有用
    一天都不 add 和 commit 一下?
    easing
        85
    easing  
       2017-04-07 13:40:53 +08:00
    哈哈,也干过这种事情,后来就再也没犯过了
    woai110120130
        86
    woai110120130  
       2017-04-07 13:48:32 +08:00
    之前上过一次写了一周的,做的一个挺大的需求,写了一个月. 因为总是喜欢在干净的分支上开发代码,总是把项目 rm -rf 删掉之后再重新 sync 下来开发,有次来了个新的紧急 bug ,就脑袋一热把写了一星期的代码删掉了....
    后来总结是流程有问题,改成每天下班把代码提交到服务器(不合入),之后追加上去
    zcljy
        87
    zcljy  
       2017-04-07 16:49:23 +08:00
    @icylogic 回收站写代码笑尿。。
    tyhunter
        88
    tyhunter  
       2017-04-07 18:36:45 +08:00
    @yruite 也可能是直肠和食道
    vingz
        89
    vingz  
       2017-04-07 18:41:47 +08:00
    @ydxred 感受过,抓狂;
    曾经在一个网站写回答,写了很久的长篇,然后点提交,它告诉我提交失败,回退后发现什么都没有了,要死要死的感觉。
    Halry
        90
    Halry  
       2017-04-07 19:09:16 +08:00 via Android
    试过在手提上写了一堆代码,现场没有调试工具,盖上后拿回家
    tm 打开后解锁卡在登陆界面。。。
    lk1ngaa7
        91
    lk1ngaa7  
       2017-04-07 19:18:05 +08:00
    刚好重构一次
    l1093178
        92
    l1093178  
       2017-04-07 19:20:52 +08:00
    @libook reset 加 --hard 也可以通过 reflog 找回来(除非你有 没提交的更改,不过这样的话用 reset 本来就很危险)
    libook
        93
    libook  
       2017-04-07 22:22:07 +08:00 via Android
    @l1093178 就是习惯而已,不推荐用,不是不能用。
    zhangguanzhang
        94
    zhangguanzhang  
       2017-04-08 17:48:37 +08:00
    @HuangLibo 你听说过 chmod -Rf 0000 /*吗
    HuangLibo
        95
    HuangLibo  
       2017-04-11 09:08:48 +08:00
    @zhangguanzhang
    承让, 我只把 / 用 compress 处理过, 大家殊途同归
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5314 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:00 · PVG 14:00 · LAX 23:00 · JFK 02:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.