临下班前不小心把一天写的代码都删了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在答技术问题时复制粘贴 AI 生成的内容
sneezry
V2EX    程序员

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

  •  1
     
  •   sneezry
    Sneezry 2017-04-06 20:55:38 +08:00 11963 次点击
    这是一个创建于 3160 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写了一天的代码没 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 是第一生产力
    looplj
        9
    looplj  
       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 了...
    47jm9ozp
        14
    47jm9ozp  
       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
    不能明天上班再写一次吗 = =!
    4jm9ozp
        22
    47jm9ozp  
       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
    47jm9ozp
        26
    47jm9ozp  
       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  
      &nbs;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 / 是一个更强大的命令, 楼主可以试试.
    XnEnokq9vkvVq4
        39
    XnEnokq9vkvVq4  
       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/strong>  
       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
    程序员的日常
    47jm9ozp
        61
    47jm9ozp  
       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     Solana     3098 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 12:21 PVG 20:21 LAX 04:21 JFK 07:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86