有没有办法从git重置中恢复未提交的更改到工作目录-hard HEAD?
当前回答
如果我丢失了一些零钱,我通常会这么做。
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 reset --hard HEAD // if needed
git add ... > git commit ... > git push ...
要将指针移回你之前的提交,但保持你在最近一次提交中所做的更改,checkout git reset -soft dadada
其他回答
信息丢失了。
由于您没有提交,您的.git从未存储此信息。所以基本上git不能为你恢复它。
但是,如果你只是使用git diff,有一种方法可以通过以下3个简单步骤使用终端输出恢复。
滚动你的终端并寻找git diff的o/p,将o/p保存在一个名为diff.patch的文件中 搜索并替换所有7个空格和8个空格与制表符(\t)字符,并保存更改。 进入git存储库。应用diff.patch (patch -p1 < diff.patch)
注意:当您将数据从终端复制到文件时,要小心并清楚地看到数据是连续输出的,不包含任何冗余数据(由于按下向上和向下箭头)。否则你会搞砸的。
如果你使用IntelliJ:
在上下文菜单中,选择“本地历史记录”,单击子菜单上的“显示历史记录”:
项目或文件夹的本地历史视图会显示所有内容 你在过去几天所做的一切。的操作列中 在对话框的下半部分,选择要滚动的动作 回来。[…这样做,对话框的上部显示了更改文件的树状视图。如果您只想恢复已删除的文件,而不考虑此后所做的其他更改,您可以在树视图中选择文件Lost.txt,然后单击Revert按钮。
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
这把我救了出来!
根据定义,git reset -hard会丢弃未提交的更改,git无法恢复它们(你的备份系统可能会有帮助,但不是git)。
实际上,很少有git重置的情况——困难是个好主意。在大多数情况下,有一个更安全的命令来做同样的事情:
If you want to throw away your uncommitted changes, then use git stash. It will keep a backup of these changes, which will expire after some time if you run git gc. If you're 99.9% sure you'll never need these changes back, then git stash is still your friend for the 0.1% case. If you're 100% sure, then git stash is still your friend because these 100% have a measurement error ;-). If you want to move your HEAD and the tip of the current branch in history, then git reset --keep is your friend. It will do the same thing as git reset --hard, but will not discard your local changes. If you want to do both, then git stash && git reset --keep is your friend.
教你的手指不要使用git重置——很难,总有一天会有回报的。
对于那些丢失了未分期和未提交更改的VSCode用户
这只会工作,如果你没有广泛编辑您的文件后再次重置。
尝试在VSCode中撤销文件更改
我确实进行了重置——当我的利益相关者决定在我构建功能时重新定义功能时,这很困难。一小时后,同样的利益相关者改变了主意。
我休息了一会儿又回来了。当我看到他们改变主意后,我决定尝试撤销我正在处理的文件,它成功了!我设法拿回了所有的作业。
我刚刚做了git重置-困难和丢失了所有未提交的更改。幸运的是,我使用了一个编辑器(IntelliJ),我能够从本地历史记录中恢复更改。Eclipse应该允许您做同样的事情。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别