git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
bbbb
V2EX  ›  git

git 重置到其他远程分支的代码后还能恢复吗?重置后,没看到历史,内心是崩溃的。

  •  
  •   bbbb · Dec 22, 2016 · 5182 views
    This topic created in 3456 days ago, the information mentioned may be changed or developed.

    情况是这样的,在一个 git 仓库添加了两个远程仓库地址 A 和 B ,今天重置的时候不小心将 A 的历史重置到 B 仓库去了,导致 B 仓库 15 号以后提交的历史都没了,而 A 又是远程仓库,一直在更新, B 是在 A 上的分支, A 并没有 pull 到本地,提交的历史其实只存在远程分支上。

    平时都有随时 push 的习惯,这段时间不知道怎么回事,没有 push ,远程仓库也是只有 15 号及以前的代码。在提交历史里面没有任何记录。

    这次重置保留到了最后一次 Push 到 B 上面的历史,疑似跟远程分支有关,这次重置是否改写了 git 的提交记录?

    问题到不严重,这几天时间都花在找问题,梳理逻辑上了,花点时间代码就回来了。

    想了解下,这样的情况下,还能找回之前的代码了吗?当看到没有历史记录的时候,我其实基本是放弃了的,当时傻逼的把工程关了,不然可能还能在工程里把代码找回些。

    看到没有历史记录的瞬间,内心不知道怎么形容。。。

    25 replies    2016-12-23 16:27:37 +08:00
    skydiver
        1
    skydiver  
       Dec 22, 2016   ❤️ 1
    git reflog 找到之前的那个提交的 sha1 ,然后 co 过去就行了
    dong3580
        2
    dong3580  
       Dec 22, 2016
    前天遇到.
    git log 看不到, 欲哭无泪,最后发现线上分支可以看到 log,然后切到线上写的变动的那个 sha1 上,拿到代码后对比线下重新覆盖上了.
    besto
        3
    besto  
       Dec 22, 2016
    前提是没有做 git gc ,而没 gc 就太简单了。
    1L 的做法就可以,你可以选择用 git fsck --lost-found 找到最后一个提交的 commit id 就可以。
    bbbb
        4
    bbbb  
    OP
       Dec 22, 2016
    @skydiver
    @besto 好,我试试。谢谢了。看到了历史记录了。
    bbbb
        5
    bbbb  
    OP
       Dec 22, 2016
    @dong3580 我没有提交到线上,以后还是的提交了
    bbbb
        6
    bbbb  
    OP
       Dec 22, 2016
    @skydiver
    @dong3580
    @besto 谢谢了,找回来了,我还以为看不到历史就找不回来了。一会还得多学习。
    wwulfric
        7
    wwulfric  
       Dec 22, 2016
    这种问题 3 条路:
    wwulfric
        8
    wwulfric  
       Dec 22, 2016
    1. git reflog (基本上这个就可以了,不小心强推分支也可以靠它恢复)
    2. 没有提交远程的话,从远程重新 fetch
    3. 提交远程的话,从别的同事那里恢复
    bbbb
        9
    bbbb  
    OP
       Dec 22, 2016
    @wwulfric 嗯,思路学习了。
    以后就得多提交,提交了就有救。
    git 现在没有研究得太多,出现问题后,第一时间保留好分支,上网查了下,关键字没弄对。没查到,恢复后,又重新查了下 git 恢复分支就找到了。
    其实出现问题后,虽然不是什么大问题,但是说不出的感觉。。。
    Rice
        10
    Rice  
       Dec 22, 2016 via iPhone
    当初第一次用 git 的时候,我就模拟了开发时可能遇到的情况各种瞎整。最后我发现 git reflog 这个命令绝大多数情况可以恢复历史。
    然后没提交的代码整没了就好像没办法恢复。
    darrenfang
        11
    darrenfang  
       Dec 22, 2016 via iPhone
    git reflog
    darrenfang
        12
    darrenfang  
       Dec 22, 2016 via iPhone
    @Rice 没提交的也可以找回,但是可能不完整,好像是这个命令 git fsck --lost-found
    hronro
        13
    hronro  
       Dec 22, 2016 via Android
    借楼问个问题,是我以前遇到的问题。当时在修改了大量代码后,在没有 commit 也没有 add 的情况下切换到别的分支去了,导致修改全丢了。当时是花了两天时间手动把所有的代码重新再写了一遍,不知道各位老司机还有什么别的方法没😂
    50vip
        14
    50vip  
       Dec 22, 2016
    你是 git push origin master -f ?
    SoloCompany
        15
    SoloCompany  
       Dec 22, 2016
    @hronro 你难道 checkout 命令在分支后面多打了个点?貌似 checkout 命令这个行为是挺坑爹的。明明是 svn revert 命令要比 git checkout 合理的多
    mingyun
        16
    mingyun  
       Dec 22, 2016
    @skydiver 老司机
    lifanxi
        17
    lifanxi  
       Dec 22, 2016
    看到 git 误操作的问题,我就推荐一下这个:
    http://sethrobertson.github.io/GitFixUm/fixup.html
    darrenfang
        18
    darrenfang  
       Dec 23, 2016 via iPhone
    @hronro 没有 add 的没试过,上次 add 之后 git reset --hard 了😂然后在 lost found 里面一个个找回来了
    bbbb
        19
    bbbb  
    OP
       Dec 23, 2016
    @Rice 哈哈哈,,我也想到了当初开始用 git 的时候,各种冲突,一直在想,这么傻逼的玩意有啥好用的。。。曾经还把一份代码复制多分。慢慢的发现是自己傻逼了。
    bbbb
        20
    bbbb  
    OP
       Dec 23, 2016
    @lifanxi 好,先收藏了。我之前也买了一本 git 的书,打算好好学习下 git 。。。只不过一直没看,看来还是得抽时间了解下。
    bbbb
        21
    bbbb  
    OP
       Dec 23, 2016
    @darrenfang 我用的这个命令找回来的, git fsck --lost-found 也看了,记录不好区分是哪一次的。
    bbbb
        22
    bbbb  
    OP
       Dec 23, 2016   ❤️ 1
    @hronro 用图形话的操作,切换的时候会提示。
    wweir
        23
    wweir  
       Dec 23, 2016 via Android   ❤️ 1
    @hronro
    当前分之有改动的情况下,只能切到没有冲突的分支,这种情况是可以完好切回来的。
    如果有冲突,会提示冲突,切不走的。
    当然,如果是习惯下各种强制性的命令切,那是自作孽,自认倒霉吧。就好比 rm -rf 怪不得别人。

    在公司里,我是一直强烈推荐命令行下用 git 辅助工具如: oh-my-zsh 。不愿意装的话,就 **必须** 做到敲完每个 git 命令之后敲一次 git status
    xiuc001
        24
    xiuc001  
       Dec 23, 2016
    只要你的代码提交过,你就能在 git 上找回来,因为 git 会报错所有的历史提交记录
    darrenfang
        25
    darrenfang  
       Dec 23, 2016
    @bbbb 对, 我一个个看的😂 还好不多
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1002 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 22:28 · PVG 06:28 · LAX 15:28 · JFK 18:28
    ♥ Do have faith in what you're doing.