一次使用git的惨痛教训

2018-09-16  本文已影响0人  钱学敏

问题1

本地文件有a.js、b.js、node_modules
执行git add .后发现没有把node_modules添加忽略,于是撤销

git init 
git add .
git reset --hard

因为git没有提交, 不小心git reset --hard,工作区代码全没了

解决办法:

git fsck --lost-found  //找回git add过但是已经不存在文件中的内容

然后到这个路径下找回

.git/lost-found/other

https://www.cnblogs.com/hope-markup/p/6683522.html
如果你没有commit你的本地修改(甚至于你都没有通过git add追踪过这些文件,当他们被删除,git reset --hard对于这些没有被commit过也没有git add过的修改来说就是具有毁灭性的
but,如果你幸运的是曾经通过git add命令追踪过这些文件,只是没有commit它们而已!那么试试git fsck --lost-found这个命令吧!然后你就可以在本地项目文件中路径为.git/lost-found/other中找到它们!!并且呢,这里面包含了所有的没有被commit(指定到某次commit)的文件,甚至可能还包括你每次git add的版本(version一词实在不知道在这里怎么翻译,姑且就认为是版本吧)!
使用git fsck --lost-found这个命令,通过.git/lost-found/other这个路径,你可以恢复任何你git add过的文件!再通过find .git/objects -type f | xargs ls -lt | sed 60q这个命令,你就可以找到最近被你add到本地仓库的60个文件
当然咯,如果你没有git add过的文件呢,被git reset --hard这个命令整过之后呢,就如你自己执行delete命令一样,再也尸骨难寻啦(也就是真的毛都不剩了!!默哀三秒)!!!!

http://www.360doc.com/content/16/0219/11/10058718_535692779.shtml

git cat-file -p ID > a.md

问题2

恢复误删除的git stash记录 (how to retrieve a deleted git stash)
1.场景:使用git stash或者sourcetree贮藏了工作现场,然后被误删除了这个stash
2.恢复方法
a.首先使用git fsck --unreachable命令查找所有unreachable记录,记录的样子大概是这样子的:

unreachable commit 3cf816eeb0dc339513c63dd041e5f4efc6241e24
unreachable commit f318453870754947fe46cf5dfd022bdf33f9c3fd
unreachable blob 5899fee2b9250f6736c256cb88e4c48a6c7f730f
b.第二步,使用git show +<sha>命令会查找你需要恢复的那一条工作现场,sha是上面的key,我们恢复的时候只能恢复unreachable commit 开头的记录,unreach blob是不能用git statsh apply+<sha>来恢复的,会报not a stash-like commit 错误

c.使用git stash apply +<你找到的那条记录的key>恢复即可。

上一篇下一篇

猜你喜欢

热点阅读