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


当前回答

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

Use:

git reflog

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

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

这招救了我几次命。

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

其他回答

一般来说,您无法返回未提交的更改。

以前的分段更改(git add)应该可以从索引对象中恢复,所以如果你这样做了,使用git fsck——lost-found来定位与它相关的对象。(这将对象写到.git/lost-found/目录;从那里你可以使用git show <filename>来查看每个文件的内容。)

如果没有,答案是:看看你的备份。也许你的编辑器/IDE将临时拷贝存储在/tmp或C:\ temp之类的目录下

git reset HEAD@{1}

这将恢复到前一个HEAD

[1] vim例如,可选地存储持久撤销,eclipse IDE存储本地历史;这样的功能可能会节省你的**

(适用于部分用户的答案)

如果你使用的是(最近的)macOS,即使你没有使用时间机器磁盘,操作系统也会每小时保存一次备份,称为 当地的快照。

进入时间机器,导航到你丢失的文件。操作系统会问你:

The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?

你应该能够恢复你丢失的文件。

我也遇到了同样的问题,我几乎要疯了....最初我提交了项目并合并。 后来当我尝试运行git push——set-upstream origin master时,我得到了这个错误

致命的:拒绝合并不相关的历史

所以我运行git reset—hard HEAD,它删除了一个3周的项目,但下面的几个命令挽救了这一天:

git reset HEAD@{1}         //this command unstage changes after reset
git fsck --lost-found      //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b

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

Use:

git reflog

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

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

这招救了我几次命。

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

对于那些丢失了未分期和未提交更改的VSCode用户

这只会工作,如果你没有广泛编辑您的文件后再次重置。

尝试在VSCode中撤销文件更改

我确实进行了重置——当我的利益相关者决定在我构建功能时重新定义功能时,这很困难。一小时后,同样的利益相关者改变了主意。

我休息了一会儿又回来了。当我看到他们改变主意后,我决定尝试撤销我正在处理的文件,它成功了!我设法拿回了所有的作业。