是否可以撤消由以下命令引起的更改?如果是,怎么办?

git reset --hard HEAD~1

当前回答

如果您使用的是JetBrains IDE(任何基于IntelliJ的),您甚至可以通过其“本地历史记录”功能恢复未提交的更改。

右键单击文件树中的顶级目录,在上下文菜单中找到“本地历史记录”,然后选择“显示历史记录”。这将打开一个视图,在该视图中可以找到您最近所做的编辑,一旦找到要返回的修订,请右键单击该修订并单击“还原”。

其他回答

这救了我的命:https://medium.com/@CarrieGuss/如何从数字-数字-设置-b830b5e3f60c中恢复

基本上,您需要运行:

for blob in $(git fsck --lost-found | awk ‘$2 == “blob” { print $3 }’); do git cat-file -p $blob > $blob.txt; done

然后手动完成痛苦,将文件重新组织到正确的结构。

注意:千万不要使用git重置,如果你不能100%理解它的工作原理,最好不要使用它。

如果你真的很幸运,就像我一样,你可以回到你的文本编辑器,点击“撤销”。

我知道这确实不是一个正确的答案,但它节省了我半天的工作,所以希望它能为其他人做同样的事情!

我知道这是一条古老的线索。。。但随着许多人在寻找如何在Git中撤销这些东西,我仍然认为在这里继续提供提示可能是一个好主意。

当您在gitgui中执行“gitadd”或将任何内容从左上角移动到左下角时,文件的内容存储在一个blob中,文件内容可以从该blob中恢复。

因此,即使文件未提交但必须已添加,也可以恢复该文件。

git init  
echo hello >> test.txt  
git add test.txt  

现在创建了blob,但它被索引引用,因此在重置之前,它不会与git fsck一起列出。所以我们重置。。。

git reset --hard  
git fsck  

您将得到一个悬空blob ce013625030ba8dba906f756967f9e9ca394464a

git show ce01362  

将向您返回文件内容“hello”

为了查找未引用的提交,我在某处找到了一个提示。

gitk --all $(git log -g --pretty=format:%h)  

我把它作为gitgui中的工具,它非常方便。

注意:此答案仅在使用IntelliJ等IDE时有效

我最近遇到了一个类似的问题,我既没有进行改变,也没有做出承诺。可以选择当地历史。我能够从IntelliJ的本地历史还原更改(参考)。

希望这对某人有所帮助。

答案隐藏在上面的详细响应中,您可以简单地执行以下操作:

$> git reset --hard HEAD@{1}

(参见git-relog show的输出)