恢复从混帐重置 – 哈德?
有没有办法从git reset --hard HEAD
恢复未提交的工作目录的更改?
一般情况下,您不能收回未提交的更改。
以前的阶段性变化( git add
)应该可以从索引对象中恢复,所以如果你这样做的话,可以使用git fsck --lost-found
find与之相关的对象。
如果没有,这里的答案是:看你的备份。 也许你的编辑器/ IDE存储在/ tmp或C:\ TEMP下的临时拷贝以及类似的东西[1]。
git reset HEAD@{1}
这将恢复到以前的头
vim eg可select存储持久性撤消, eclipse IDE存储本地历史 ; 这些function可能会节省您的**
我今天也不小心跑了git reset --hard
今天也在我的回购库上。 为了恢复它,我运行了git fsck --lost-found
,它将所有未被引用的blob写入到<path to repo>/.git/lost-found/
git fsck --lost-found
<path to repo>/.git/lost-found/
。 由于这些文件是未提交的,我发现它们在<path to repo>/.git/lost-found/
目录下的other
目录中。 从那里,我可以看到未提交的文件,复制出斑点并重命名它们。
注意:这只适用于你想要保存到索引的文件(使用git add .
)。 如果文件不在索引中,则会丢失。
从这个SO回答
$ git reflog show 93567ad HEAD@{0}: reset: moving to HEAD@{6} 203e84e HEAD@{1}: reset: moving to HEAD@{1} 9937a76 HEAD@{2}: reset: moving to HEAD@{2} 203e84e HEAD@{3}: checkout: moving from master to master 203e84e HEAD@{4}: reset: moving to HEAD~1 9937a76 HEAD@{5}: reset: moving to HEAD~1 d5bb59f HEAD@{6}: reset: moving to HEAD~1 9300f9d HEAD@{7}: commit: fix-bug # said the commit to be recovered back is on 9300f9d (with commit message fix-bug) $ git reset HEAD@{7}
你有一天回来! :)
是的,你可以从硬重置 git中恢复。
使用:
git reflog
获取提交的标识符。 然后使用:
git reset --hard <commit-retrieved-using-reflog>
这个把戏挽救了我的生活几次。
你可以在这里findreflog的文档。
我只是做了git reset --hard
并且丢掉了所有我未提交的更改。 幸运的是,我使用了一个编辑器(IntelliJ),我能够从本地历史中恢复更改。 Eclipse应该允许你做同样的事情。
如果你使用类似IntelliJ的东西:
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
这只是把我的屁股从火里拿出来!
当我在一个本地项目上工作时,我创build了一个新的存储库。 当我试图用.gitignore将所有文件添加到新的存储库时,我不小心添加了错误的提交,然后尝试清除它。
我跑git reset --hard origin/master
:P
然后我所有的本地文件被删除,因为回购是空的。 我以为一切都消失了
这救了我的命:
git reflog show git reset HEAD@{1} git push
希望它挽救了另一个生命。
按照定义, git reset --hard
将会毫无办法地让Git恢复它们(你的备份系统可能会有所帮助,而不是Git),否则将会抛弃未提交的更改。
事实上,很less有情况下, git reset --hard
是个好主意。 在大多数情况下,有一个更安全的命令来做同样的事情:
-
如果你想扔掉你未提交的更改,那么使用
git stash
。 它将保留这些更改的备份,如果您运行git gc
,这些备份将在一段时间后过期。 如果你99.9%肯定你永远不会需要这些变化,那么在0.1%的情况下,git stash
仍然是你的朋友。 如果你100%确定,那么git stash
仍然是你的朋友,因为这100%有一个测量错误;-)。 -
如果你想移动你的
HEAD
和历史上当前分支的提示,那么git reset --keep
是你的朋友。 它会做同样的事情git reset --hard
,但不会放弃您的本地更改。 -
如果你想这样做,那么
git stash && git reset --keep
是你的朋友。
教你的手指不要使用git reset --hard
,它会回报一天。
信息丢失了。
由于您没有提交,您的.git从未存储过这些信息。 所以,基本上git
不能为你恢复。
但是,如果你只是做了git diff
,你可以用下面3个简单的步骤使用terminal输出来恢复。
- 滚动您的terminal,并寻找
git diff
的o / p。 将o / p保存在名为diff.patch的文件中 - 使用制表符(\ t)search并replace所有7个空格和8个空格并保存更改。
- 进入你的git仓库。 应用diff.patch(
patch -p1 < diff.patch
)
你被保存了! 🙂
注意:在将数据从terminal复制到文件时,要小心并清楚地看到数据是连续输出,并且没有包含任何冗余数据(由于按上下箭头)。 否则,你可能会搞砸了。
你可以在reset --hard HEAD
之后取回提交 – reset --hard HEAD
。
利用“ git reflog
”来检查分支中HEAD
的历史logging。
你会在这里看到你的提交和它的ID。
做一个
git reset {commit Id of the commit you want to bring back}
如果幸运的是在另一个编辑器(例如Sublime Text)上打开了相同的文件,请尝试在这些文件上使用ctrl-z。 它只是救了我..
从这个SO参考答案,
在运行git reflog show之后说你要去提交9300f9d
运行git reset 9300f9d后
你可以做混帐状态,然后你可能需要签出你的文件来恢复你的改变
混帐签出 – 文件path/名称
如果我失去了一些变化,我通常会这样做。
git reflog git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master manually copy and paste changes from detached branch to master or working branch git reser --hard HEAD // if needed git add commit push ...
我发现,在git reset --hard <commit>
之前的任何未提交的文件git reset --hard <commit>
从git历史logging中被删除是困难的。 然而,我很幸运,在我把头发拉出的整个过程中,我的代码编辑器会话保持打开状态,我发现每个受影响的文件中的一个简单的control + z
将文件的状态返回到版本在Git之前如此强调重置所有我没有特别要求的东西。 Hooray!!
当我们做混帐重置 – 哈尔和所有本地未被改动的更改被删除。 要恢复更改 – 在IDE中单击该文件,将文件与本地历史进行比较,这将根据date列出更改,我们可以恢复数据。 你的一天得救了!