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

2015-04-05 16:54:17 +08:00
 giskard

新学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丢失的部分吗?

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

工作区修改的内容,不提交到版本库,丢了就找不回来了。
VirgilMing
2015-04-05 22:00:00 +08:00
revert 就可以了吧,reset 也太暴力了……
raikecody
2015-04-05 23:06:57 +08:00
@giskard 看什么书请问?
ilotuo
2015-04-05 23:22:35 +08:00
@raikecody
官方gitpro挺好的。
lz的问题我也有过一次教训… 慎用reset
多从git设计方法考虑问题。人家肯定想到有回退版本而保留修改的方法。
个人看法
Andiry
2015-04-06 00:28:41 +08:00
只要多push,就没这个问题
magicianzrh
2015-04-06 00:38:35 +08:00
干这种事情前先git status下,不要这么暴力
ooxxcc
2015-04-06 01:08:24 +08:00
不要用reset --hard,太暴力了。。可以考虑reset --mixed
adami
2015-04-06 06:55:22 +08:00
必须commit了才能恢复吧
giskard
2015-04-06 10:44:58 +08:00
giskard
2015-04-06 10:47:49 +08:00
@magicianzrh 是,我现在也意识到了,git status很有用。我还需要多学习,主要是当时运行的时候就是照着教程在试,也没去管reset --hard是什么含义。反正也只是随便弄了几个文件在试,所以没什么损失。
giskard
2015-04-06 10:48:25 +08:00
@VirgilMing 嗯,revert命令我还没看到,我继续学,谢谢提醒
giskard
2015-04-06 10:49:24 +08:00
@ooxxcc 好的,谢谢提醒,我去看看--mixed的含义
jianghu52
2015-04-06 11:29:55 +08:00
楼主更应该改变的是一种习惯。
git的理念是小步快跑,鼓励迭代。所以理想的状态是,当你准备做回滚,或者新开分支,你的本地版本应该是全部提交的状态。这样不管你做什么样的操作,都不会有丢失的问题。
w99wen
2015-04-06 14:00:04 +08:00
如果是用的git reset,可以用git reflog看下记录,然后用git reset loghash --hard 跳转回去。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/181709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX