恢复 git reset --soft 的操作

10

我修改了我的分支中的一些文件并执行了

git add --all

但这添加了一些我不想提交的文件。

所以我进行了

git reset --soft HEAD~2 (instead of doing git reset HEAD)

但是之前的提交是由其他人完成的,导致了很多文件处于修改/添加/删除状态。有没有办法回到那个阶段,使我只看到我添加/修改的文件?由于我没有进行实际提交,有没有方法将我的HEAD移回到主分支而不会丢失我的更改?git pull会导致合并冲突,因为我实际上没有提交我的更改。

谢谢!


1
你可能执行了git reset --soft,而不是git soft --reset :-) - Thanatos
关于撤销git reset的内容。 - Rodrigue
3个回答

14

为了以后参考,您可以调用git reflog来查看由您的行为引起或留下的提交记录,其中包括在您的工作树中不再存在的提交。


这是否意味着我可以回到记录在reflog中的分支的先前阶段?如果是,怎么做? - kriver
看起来我可以通过 git reset --hard <reflog_id> 来做到这一点。但我的问题是,由于我从未提交过更改,因此没有关于它们的 reflog 记录。 :( - kriver
3
噢。git reset --hard 是“必要时删除一些内容”的同义词,因此您必须将其作为最后的最后手段使用,当您确定没有需要备份的内容时。抱歉,我应该明确说明我正在为丹的命令投+1票,reflog 对于提供附加信息非常有用,并将显示 -一切- git 记录的内容。我相信这排除了将内容添加到索引中的可能性。 - Kzqai
看起来 git reflog 没有记录关于已添加但未提交的更改信息。感谢 Dan 和 Tchalvak 的回答。 - kriver

7

只需执行 git reset master 命令,这将仅更新索引和 HEAD 所指向的内容,不会修改你的工作目录文件。


1
看起来不会起作用,因为我执行了 git reset --hard HEAD@{1} 来撤销我的软重置(从 reflog 中)。它吹走了我的更改。那么,在硬重置后如何获取更改,如果您从未提交过(但添加并软重置)这些更改的文件?谢谢! - kriver
很遗憾,如果您从未提交过更改并且该更改已从工作树中删除,则无法找回它。 - Dan Moulding

-1
一个可视化解决方案:打开 Git GUI:
git gui

在“提交消息”框的底部,选择标记为“修改上次提交”的单选按钮。您将在左侧看到“暂存更改”区域。它包含您在上次提交中添加的文件。单击要从索引中删除的文件图标即可将其移除。之后,只需按下“提交”按钮再次提交即可。

1
请记住,在安装 Git 时,默认情况下不会安装 Git GUI。我实际上不知道那个命令是什么,所以您可能需要澄清它是什么以及如何获取它,以便人们不会对您的答案投反对票。 - Elijah Lynn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接