V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
tongz
V2EX  ›  git

关于 git 的一个撤销恢复,恢复不了的问题

  •  
  •   tongz · 2017-10-08 01:35:42 +08:00 · 3323 次点击
    这是一个创建于 2603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写完代码
    在 git 上边进行了 add 操作
    没有 commit
    然后 pull 了一下
    接着撤销 使用的是 git reset --hard 进行撤销
    现在求恢复,我已经 reflog 查看了操作日志 然后回退了一下,发现回不去了........
    请问大神还有没有办法救回来..

    需要您的回答,感谢您的回答!!!!

    10 条回复    2017-10-08 12:01:07 +08:00
    tongz
        1
    tongz  
    OP
       2017-10-08 01:51:15 +08:00
    补一句,
    git status 之后

    现在
    On branch master
    Your branch is up-to-date with 'origin/master'.
    nothing to commit, working tree clean
    说我没有任何需要去提交的修改.....
    Lpl
        2
    Lpl  
       2017-10-08 01:56:21 +08:00 via iPhone
    除非你的 IDE 有 history,不然没有办法恢复了
    tongz
        3
    tongz  
    OP
       2017-10-08 02:04:41 +08:00
    @Lpl 感谢...只能从头再来了....
    SoloCompany
        4
    SoloCompany  
       2017-10-08 03:44:04 +08:00
    如果你还没有执行过 gc

    并且还能记得文件的某部分内容的话,也许还能有救(因为已经 add 过,所以文件已经进入过 index 也就是说存在于 git database 的)

    参考 https://stackoverflow.com/questions/7088855/git-get-all-blobs-with-pattern/37199329#37199329

    参考命令
    ```
    git grep ’ text' $(git fsck --unreachable | grep '^unreachable blob' | cut -d' ' -f3)
    ```

    如果 gc 过就肯定没救了
    msg7086
        5
    msg7086  
       2017-10-08 03:56:10 +08:00
    @SoloCompany 没记错的话 gc 只会清除多少天以上的辣鸡吧。
    FrankHB
        6
    FrankHB  
       2017-10-08 06:27:49 +08:00
    @msg7086 可以--aggressive --prune=now。
    shingle
        7
    shingle  
       2017-10-08 10:33:01 +08:00 via Android
    ctrl+z
    acr0ss
        8
    acr0ss  
       2017-10-08 10:44:33 +08:00
    gam2046
        9
    gam2046  
       2017-10-08 10:47:58 +08:00
    尝试恢复到最近的一条 commit 行不行
    git log 查看一下你要恢复的那条 commit 的 id
    git rebase -i 你要恢复的 commit id 的下一条 id

    在文本编辑器里,把需要抛弃的操作标记为 drop

    但是看你描述,并没有 commit,那么是不是可以直接 checkout 最近的一条 commit,add 后没有 commit 的文件应该是不会收到影响?(大雾)
    lilydjwg
        10
    lilydjwg  
       2017-10-08 12:01:07 +08:00
    很麻烦,因为没有目录信息。add 过的文件被 gc 之前自然是还在的,然而要识别是哪个不容易。可以 find .git/objects -type -f -mtime -30 这样子按 mtime 搜索一下,然后和 dangling objects 取交集,再排查。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1977 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.