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

git add .之后,再 reset --hard 到上一个 commit,所有文件都没了,还有救么

  •  
  •   ps · 2016-10-07 01:28:47 +08:00 · 4592 次点击
    这是一个创建于 2972 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本来想把一个本地的项目弄到远程仓库上,第一个 commit 提交了一个 README ,然后 push 了 然后想着把项目剩余的其他文件提交上去,git add .之后,脑子抽了,又reset -hard到上一个 commit ,结果文件就这样没了,没了。。。这特么还能还原回来么,求助 /(ㄒoㄒ)/~~

    第 1 条附言  ·  2016-10-07 02:28:12 +08:00
    绝望了,血一般的教训 /(ㄒoㄒ)/~~
    14 条回复    2016-10-09 09:57:52 +08:00
    df4VW
        1
    df4VW  
       2016-10-07 01:32:16 +08:00
    git fsck --lost-found
    johnnie502
        2
    johnnie502  
       2016-10-07 01:39:28 +08:00
    git reflog 找到 commit 的那个 sha ,然后 git reset --hard [sha] 过去即可
    ps
        3
    ps  
    OP
       2016-10-07 01:42:26 +08:00
    @df4VW 出来了一大堆,是要逐个恢复么
    msg7086
        4
    msg7086  
       2016-10-07 01:42:57 +08:00
    如果你文件没提交成功,那么 reset hard 是不会删除你文件的。
    如果 reset hard 以后你文件不见了,说明他已经在你提交记录里了,找下 reflog 即可。
    ps
        5
    ps  
    OP
       2016-10-07 01:44:06 +08:00
    @johnnie502 git reflog 只有第一次 commit 的记录,仓库里面只有 README 一个文件
    ps
        6
    ps  
    OP
       2016-10-07 01:47:14 +08:00
    @msg7086 我也很奇怪,但是 reflog 里面是只有一个提交记录
    ps
        7
    ps  
    OP
       2016-10-07 01:50:07 +08:00
    @msg7086 我在 git add . 之后没有提交,直接就 reset 了
    johnnie502
        8
    johnnie502  
       2016-10-07 01:54:14 +08:00
    只 add 但没 commit 的话,就只能从 fsck 里面找了
    ps
        9
    ps  
    OP
       2016-10-07 01:58:50 +08:00
    @johnnie502 有没有一个批量恢复的方法, fsck 里面有很多,应该都是要恢复的
    skydiver
        10
    skydiver  
       2016-10-07 02:01:19 +08:00 via iPad
    如果你不 git gc 的话,那个提交还在。翻翻命令行记录找到那个 commit 的 hash 然后 checkout 就行了。

    或者 reflog 找找那次提交的 hash 。
    sutra
        11
    sutra  
       2016-10-07 02:02:49 +08:00
    git fsck --lost-found
    ls -l .git/lost-found/other/
    jyz19880823
        12
    jyz19880823  
       2016-10-07 10:17:49 +08:00 via Android
    我办过这事,还好 Emacs 还有,直接把所有文件重新保存一次
    lechain
        13
    lechain  
       2016-10-07 10:52:43 +08:00
    git reflog ,应该可以看到记录,只要你没有进行 git gc 。
    有记录了就可以 checkout 回来
    lijinma
        14
    lijinma  
       2016-10-09 09:57:52 +08:00
    刚看到这个帖子就测试了一下,哈哈哈哈

    git fsck --lost-found 可以找到,不过会找回来很多。找回来后自己 grep 一下哪个是你的目标文件吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1172 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:41 · PVG 02:41 · LAX 10:41 · JFK 13:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.