有没有办法从git重置中恢复未提交的更改到工作目录-hard HEAD?


当前回答

信息丢失了。

由于您没有提交,您的.git从未存储此信息。所以基本上git不能为你恢复它。

但是,如果你只是使用git diff,有一种方法可以通过以下3个简单步骤使用终端输出恢复。

滚动你的终端并寻找git diff的o/p,将o/p保存在一个名为diff.patch的文件中 搜索并替换所有7个空格和8个空格与制表符(\t)字符,并保存更改。 进入git存储库。应用diff.patch (patch -p1 < diff.patch)

注意:当您将数据从终端复制到文件时,要小心并清楚地看到数据是连续输出的,不包含任何冗余数据(由于按下向上和向下箭头)。否则你会搞砸的。

其他回答

信息丢失了。

由于您没有提交,您的.git从未存储此信息。所以基本上git不能为你恢复它。

但是,如果你只是使用git diff,有一种方法可以通过以下3个简单步骤使用终端输出恢复。

滚动你的终端并寻找git diff的o/p,将o/p保存在一个名为diff.patch的文件中 搜索并替换所有7个空格和8个空格与制表符(\t)字符,并保存更改。 进入git存储库。应用diff.patch (patch -p1 < diff.patch)

注意:当您将数据从终端复制到文件时,要小心并清楚地看到数据是连续输出的,不包含任何冗余数据(由于按下向上和向下箭头)。否则你会搞砸的。

你只能恢复你丢失的阶段性(git add)更改。

执行此命令可以方便地恢复

步骤:1进入工程项目根目录,执行该命令

npx git-recover

步骤:2输入恢复目录路径如

/Users/apple/RecoveryDirectory

你会在RecoveryDirectory中丢失文件

根据定义,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重置——很难,总有一天会有回报的。

是的,你可以在git中从硬重置中恢复。

Use:

git reflog

来获取提交的标识符。 然后使用:

git reset --hard <commit-id-retrieved-using-reflog>

这招救了我几次命。

你可以在这里找到reflog的文档。

我遇到了这样一个场景,我签出了本地更改,但没有提交或存储它们。据我所知,没有任何命令能帮助我。对我有用的是CTRL+Z。

CTRL + Z

偶然的机会,我所有的文件都在编辑器中打开,所以在编辑器中,我只需按CTRL+Z所需的文件,这解决了我的问题

PS:我用的是Sublime文本编辑器。