新学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丢失的部分吗?
![]() | 1 networm 2015-04-05 17:26:53 +08:00 ![]() 不能,文件被删除了,你可以尝试用磁盘恢复软件找一下 |
![]() | 3 Earthman 2015-04-05 18:09:28 +08:00 ![]() 用了hard就会清空工作区呢,先去把书好好读下吧,反正不多的 |
![]() | 4 msg7086 2015-04-05 18:13:10 +08:00 via iPhone 慎用hard reset |
5 giskard OP @Earthman 嗯,好的,继续看书去了。今天下午刚开始学,我在拿无关紧要的文件做实验呢,其实我也还不知道--hard的含义 |
![]() | 7 zeayes 2015-04-05 21:37:01 +08:00 不能,git只是找回已提交的数据。 工作区修改的内容,不提交到版本库,丢了就找不回来了。 |
![]() | 8 VirgilMing 2015-04-05 22:00:00 +08:00 revert 就可以了吧,reset 也太暴力了…… |
![]() | 10 ilotuo 2015-04-05 23:22:35 +08:00 via Android |
![]() | 11 Andiry 2015-04-06 00:28:41 +08:00 只要多push,就没这个问题 |
12 magicianzrh 2015-04-06 00:38:35 +08:00 干这种事情前先git status下,不要这么暴力 |
![]() | 13 47jm9ozp 2015-04-06 01:08:24 +08:00 不要用reset --hard,太暴力了。。可以考虑reset --mixed |
14 adami 2015-04-06 06:55:22 +08:00 via iPhone 必须commit了才能恢复吧 |
15 giskard OP |
16 giskard OP @magicianzrh 是,我现在也意识到了,git status很有用。我还需要多学习,主要是当时运行的时候就是照着教程在试,也没去管reset --hard是什么含义。反正也只是随便弄了几个文件在试,所以没什么损失。 |
17 giskard OP @VirgilMing 嗯,revert命令我还没看到,我继续学,谢谢提醒 |
19 jianghu52 2015-04-06 11:29:55 +08:00 楼主更应该改变的是一种习惯。 git的理念是小步快跑,鼓励迭代。所以理想的状态是,当你准备做回滚,或者新开分支,你的本地版本应该是全部提交的状态。这样不管你做什么样的操作,都不会有丢失的问题。 |
![]() | 20 w99wen 2015-04-06 14:00:04 +08:00 如果是用的git reset,可以用git reflog看下记录,然后用git reset loghash --hard 跳转回去。 |