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

今天下午刚开始学 git,遇到一个麻烦,请教各位 V 友

  •  
  •   giskard · 2015-04-05 16:54:17 +08:00 · 4166 次点击
    这是一个创建于 3309 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新学git,遇到一个问题,我先描述一下:
    git init在一个目录下创建了一个repository,然后在里面建立了两个文件,test1和test2。
    我一边学一遍在test1里记录学习过程,对test1进行了几次修改,git add -> git commit 了几次。

    然后我开始编辑test2,随便增加几行内容,然后git add test2 -> git commit 了三次。

    我创建test2的目的是用来测试版本回退即git reset 的用法。
    在最后一次git add test2 和git commit 以后,我又对test1进行了修改,但是修改完以后没有进行 git add test1 和 git commit。
    然后我执行了版本回退,git reset --hard HEAD^,结束以后,发现 test2回退到了上一个版本,但是同时,test1的内容也发生了变化:在最后一次git add test2 和git commit 以后对test1增加的内容都没了。

    我大概知道是因为我没有在修改test1后进行git add 和 git commit 造成的。

    问题是,这种情况下,还有可能找回test1丢失的部分吗?

    21 条回复    2015-04-06 14:01:27 +08:00
    networm
        1
    networm  
       2015-04-05 17:26:53 +08:00   ❤️ 1
    不能,文件被删除了,你可以尝试用磁盘恢复软件找一下
    giskard
        2
    giskard  
    OP
       2015-04-05 17:34:10 +08:00
    @networm 好的,谢谢。丢失的文件不太重要,所以无所谓了。我记住这个教训了。
    Earthman
        3
    Earthman  
       2015-04-05 18:09:28 +08:00   ❤️ 1
    用了hard就会清空工作区呢,先去把书好好读下吧,反正不多的
    msg7086
        4
    msg7086  
       2015-04-05 18:13:10 +08:00 via iPhone
    慎用hard reset
    giskard
        5
    giskard  
    OP
       2015-04-05 19:50:38 +08:00
    @Earthman 嗯,好的,继续看书去了。今天下午刚开始学,我在拿无关紧要的文件做实验呢,其实我也还不知道--hard的含义
    giskard
        6
    giskard  
    OP
       2015-04-05 19:50:51 +08:00
    @msg7086 谢谢提醒
    zeayes
        7
    zeayes  
       2015-04-05 21:37:01 +08:00
    不能,git只是找回已提交的数据。

    工作区修改的内容,不提交到版本库,丢了就找不回来了。
    VirgilMing
        8
    VirgilMing  
       2015-04-05 22:00:00 +08:00
    revert 就可以了吧,reset 也太暴力了……
    raikecody
        9
    raikecody  
       2015-04-05 23:06:57 +08:00
    @giskard 看什么书请问?
    ilotuo
        10
    ilotuo  
       2015-04-05 23:22:35 +08:00 via Android
    @raikecody
    官方gitpro挺好的。
    lz的问题我也有过一次教训… 慎用reset
    多从git设计方法考虑问题。人家肯定想到有回退版本而保留修改的方法。
    个人看法
    Andiry
        11
    Andiry  
       2015-04-06 00:28:41 +08:00
    只要多push,就没这个问题
    magicianzrh
        12
    magicianzrh  
       2015-04-06 00:38:35 +08:00
    干这种事情前先git status下,不要这么暴力
    ooxxcc
        13
    ooxxcc  
       2015-04-06 01:08:24 +08:00
    不要用reset --hard,太暴力了。。可以考虑reset --mixed
    adami
        14
    adami  
       2015-04-06 06:55:22 +08:00 via iPhone
    必须commit了才能恢复吧
    giskard
        15
    giskard  
    OP
       2015-04-06 10:44:58 +08:00
    giskard
        16
    giskard  
    OP
       2015-04-06 10:47:49 +08:00
    @magicianzrh 是,我现在也意识到了,git status很有用。我还需要多学习,主要是当时运行的时候就是照着教程在试,也没去管reset --hard是什么含义。反正也只是随便弄了几个文件在试,所以没什么损失。
    giskard
        17
    giskard  
    OP
       2015-04-06 10:48:25 +08:00
    @VirgilMing 嗯,revert命令我还没看到,我继续学,谢谢提醒
    giskard
        18
    giskard  
    OP
       2015-04-06 10:49:24 +08:00
    @ooxxcc 好的,谢谢提醒,我去看看--mixed的含义
    jianghu52
        19
    jianghu52  
       2015-04-06 11:29:55 +08:00
    楼主更应该改变的是一种习惯。
    git的理念是小步快跑,鼓励迭代。所以理想的状态是,当你准备做回滚,或者新开分支,你的本地版本应该是全部提交的状态。这样不管你做什么样的操作,都不会有丢失的问题。
    w99wen
        20
    w99wen  
       2015-04-06 14:00:04 +08:00
    如果是用的git reset,可以用git reflog看下记录,然后用git reset loghash --hard 跳转回去。
    giskard
        21
    giskard  
    OP
       2015-04-06 14:01:27 +08:00
    @jianghu52 谢谢提醒,我记住了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4735 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:57 · PVG 17:57 · LAX 02:57 · JFK 05:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.