1. 撤销上一次commit/add
参考:git撤销已提交的commit
"git撤销上一次commit的内容"
> git reset --soft HEAD^
"如果需要连add的文件也一并撤销,使用命令"
> git reset --hard HEAD^
"""
HEAD^ 表示上一个版本,即上一次的commit,也可以写成HEAD~1 如果进行两次的commit,想要都撤回,可以使用HEAD~2
–soft 不删除工作空间的改动代码 ,撤销commit,不撤销git add file
–hard 删除工作空间的改动代码,撤销commit且撤销add
"""
2. 因为reset导致部分文件消失
但是后来发现,执行上面的操作之后,会有一些文件丢失。。
网上最常见的一种方法比较复杂,可以去看参考中的[1,2,4]
这里只记录相对简单的一种,主要是参考中的[5],
"1. 使用git reflog show查看自己reset时的HEAD@{num}"
>git reflog show
68ae78b (HEAD -> dev) HEAD@{0}: reset: moving to HEAD^
f0a236c HEAD@{1}: commit: initial commit
68ae78b (HEAD -> dev) HEAD@{2}: checkout: moving from XXXto dev
3d03b4f (origin/master, origin/XXX, origin/XXX, origin/HEAD, huangs) HEAD@{3}: reset: moving to origin/HEAD
3d03b4f (origin/master, origin/XXX, origin/XXX, origin/HEAD, huangs) HEAD@{4}: checkout: moving from dev to XXX
68ae78b (HEAD -> dev) HEAD@{5}: reset: moving to HEAD
68ae78b (HEAD -> dev) HEAD@{6}: commit: first update
f3f616b (origin/dev) HEAD@{7}: clone: from http://XXX/XX/XXXX.git
"2. 假设想要恢复的是68ae78b ,即HEAD@{0},使用git reset "
> git reset HEAD@{0}
Unstaged changes after reset:
M XXX/XXX/XXX.cfg
"如果在恢复之前又进行了修改,那么这里会提示,但是会覆盖。"
"3. 如果上述命令无效,可以尝试这个,HEAD@{0}对应的hash"
> git reset --hard 68ae78b
执行完上述命令,就可以看到上次的内容就恢复了。
如果依然无法解决,自己去看?stack overflow:Recover from git reset --hard?
参考:
- ?CSDN:恢复因git reset --hard 但未提交全部文件到仓库导致的文件丢失问题
- 掘金:git reset --hard后如何恢复文件
- 简书:git reset --hard 操作后的数据恢复
- 博客园:git reset --hard 操作后的数据恢复
- ?stack overflow:Recover from git reset --hard?
3. 后续操作
虽然恢复了,但是会导致,上一次撤销的commit /add 也恢复,因此最好是
git stash
git pull
git stash pop
"然后再add ,commit,push"
|