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

git 新增的文件 git add. 后 不小心从暂存区撤销了 新增的文件都没了 求恢复

  •  
  •   overflow99 · 2019-11-19 20:39:58 +08:00 · 4507 次点击
    这是一个创建于 1591 天前的主题,其中的信息可能已经有所发展或是发生改变。
    14 条回复    2019-11-20 14:30:29 +08:00
    zjsxwc
        1
    zjsxwc  
       2019-11-19 20:51:53 +08:00
    无解,如果你用 JB 家的 IDE 的话打开那个要恢复的文件看看 工具栏 VCS --> Local History --> Show History 有没有记录可以恢复吧
    zjsxwc
        2
    zjsxwc  
       2019-11-19 20:54:36 +08:00
    如何要恢复的文件已经被删掉了,就选中上级目录后 看看 工具栏 VCS --> Local History --> Show History 有没有记录可以恢复
    Dachunlv
        3
    Dachunlv  
       2019-11-19 20:57:25 +08:00 via iPhone
    如果楼主用的是 Intellij IDEA 或者工程放在了 Dropbox 中,还有救,其他的恢复方式还不清楚...
    tsl0922
        4
    tsl0922  
       2019-11-19 21:46:03 +08:00   ❤️ 2
    如果没有执行过 gc 的话,还能恢复,但是文件名应该没了。试试 git fsck --lost-found,有没有 dangling 的 blob 对象列出,然后尝试 git cat-file -p 对象 id 能输出对象内容。
    bejond
        5
    bejond  
       2019-11-19 22:19:01 +08:00
    你把你最后执行的几个命令到谷歌上搜搜,加个 revert。一般你能遇到的事故,大牛都有解决方案。
    githua
        6
    githua  
       2019-11-19 23:10:50 +08:00   ❤️ 1
    不用担心,可以找回的,在你执行 git add 的时候,git 已经帮你把他们保存到 .git\objects 目录了。这里有个命令可以查看文件内容,如果文件很多,可以批量执行。
    $ git cat-file -p e61ef7b965e17c62ca23b6ff5f0aaf09586e10e9

    --- 因为我是 githui.com
    IridiumPt
        7
    IridiumPt  
       2019-11-20 01:17:18 +08:00 via iPad   ❤️ 1
    如#4 和#6 所说,可以根据添加文件后生成的 blob_id 查,到.git\objects 目录把文件夹按时间排序锁定 git add .后创建的文件夹,文件夹名+文件名=对应的 blob_id,然后 git cat-file -p blob_id
    passerbytiny
        8
    passerbytiny  
       2019-11-20 08:53:22 +08:00
    所有 git 命令都是不允许删除本地工作空间已修改内容的。如果你只是不小心从暂存区撤销,那么新增文件应该在本地工作空间,不会消失。如果消失了,那是你(或者你的 GUI )做了其他操作。

    目前的情况,你连问题现象都很难说清楚,建议还是找个人帮你现场解决。或者,通读一遍 https://git-scm.com/book/zh/v2 然后再求助搜索引擎
    xzysaber
        9
    xzysaber  
       2019-11-20 09:27:29 +08:00
    不知道是否理解了你的描述(或许遗漏了部分描述),如果只是从 stage 撤销,那么文件还是在工作区的,可以用 git status 查看下。如果你还做了一些没有描述的操作导致工作区中的文件也丢失了,如果 IDE 用的是 jetbarins 家的话,或许可以从 local history 中找回,或者直接在 IDE 内 Ctrl+z 试下。
    cco
        10
    cco  
       2019-11-20 10:36:50 +08:00
    新增的文件,撤销不会不见啊。
    git reset HEAD
    az999
        11
    az999  
       2019-11-20 10:48:37 +08:00
    lepig
        12
    lepig  
       2019-11-20 11:21:52 +08:00
    @IridiumPt 我使用`git add .`以后 然后 cd 到`.git/objects`下面查看,好像并没有我执行命令的时间点创建的文件夹呢?
    overflow99
        13
    overflow99  
    OP
       2019-11-20 12:18:18 +08:00
    ---已解决---
    通过 @tsl0922 的方法,找到了文件,里面是每个文件和 commit 历史
    查看:git cat-file -p + <hash> 如果是文件看到具体可读代码,如果是 commit 看到文件改动信息
    恢复:git stash apply +<hash>
    由于我是一次性增加很多文件,中途没提交过一次,这种方法恢复起来比较麻烦,哎。。。我已经开始重写了。给大家个建议,开发过程中尽量要多次 commit
    IridiumPt
        14
    IridiumPt  
       2019-11-20 14:30:29 +08:00 via iPad
    @lepig `git add`的文件内容没改变的话就不会生成新的 blob 组件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5878 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:19 · PVG 10:19 · LAX 19:19 · JFK 22:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.