【问题标题】:Recovering a git reset --soft恢复 git reset --soft
【发布时间】:2011-01-03 23:07:48
【问题描述】:

我修改了分支中的一些文件并做了一个

git add --all

但这添加了一些我不打算为提交添加的文件。

所以我做了一个

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

但是之前的提交是由其他人提交的,导致很多文件处于修改/添加/删除状态。有没有办法回到我看到的唯一更改是我添加/修改的文件的阶段?由于我没有做出实际的提交,有没有办法让我的头回到主人而不吹走我的改变? git pull 导致合并冲突,因为我实际上并没有提交我的更改。

谢谢!

【问题讨论】:

  • 你可能是git reset --soft,而不是git soft --reset :-)
  • Undoing git reset相关。

标签: git reset


【解决方案1】:

为了将来参考,您可以通过调用 git reflog 查看您的行为导致或留下的提交,其中将包括不再在您的工作树中的提交。

【讨论】:

  • 这是否意味着我可以回到分支中记录在 reflog 中的上一个阶段?如果是,怎么做?
  • 看起来我可以通过 git reset --hard 来做到这一点。但我的问题是我添加的更改没有 reflog,因为我从未提交过它们。 :(
  • 喂。 git reset --hard 是“必要时删除一些东西”的同义词,因此当您确定没有任何需要备份的内容时,您必须将其用作最后的手段。抱歉,我应该指定我对 dan 的命令进行了 +1 投票,reflog 对添加信息很有用,并且会显示 git 确实记录的所有内容。我相信这会使向索引中添加内容无法运行。
  • 看起来 git reflog 没有记录有关添加但未提交的更改的信息。谢谢 Dan 和 Tchalvak 的回答。
【解决方案2】:

只需git reset master。这只会更新索引和HEAD 指向的内容。它不会修改您的工作树文件。

【讨论】:

  • 看起来它不会起作用,因为我做了一个 git reset --hard HEAD@{1} 来撤消我的软重置(来自 reflog)。它吹走了我的变化。那么,如果您从未提交(但添加并软重置)那些更改的文件,有没有办法在硬重置后恢复更改?谢谢!
  • 不幸的是,没有。如果您从未提交过更改并且该更改已从工作树中删除,则无法将其取回。
【解决方案3】:

可视化解决方案:打开 git gui:

git gui

Commit Message 框底部选择标记为 Amend Last Commit 的单选按钮。您将在左侧看到 Staged Changes 区域。它包含您在上次提交中添加的文件。单击您不希望在提交中的文件的图标,将它们从索引中删除。之后只需按 Commit 按钮再次提交即可。

【讨论】:

  • 请记住,安装 git 时默认不安装 git gui。我实际上并不知道该命令是什么,因此您可能想澄清它是什么以及如何获得它,以免人们对您的答案投反对票。
猜你喜欢
  • 2021-05-14
  • 2019-03-11
  • 2020-06-22
  • 2014-01-29
  • 2020-02-16
  • 2011-07-09
  • 1970-01-01
  • 2011-01-02
  • 2021-10-22
相关资源
最近更新 更多