新学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 1
不能,文件被删除了,你可以尝试用磁盘恢复软件找一下
|
3
Earthman 2015-04-05 18:09:28 +08:00 1
用了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
ooxxcc 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 跳转回去。
|