1

我想放弃最近的更改并返回已推送的最新提交 (2de1222)。

当时只有一个文件正在处理(未暂存)。自 2de1222 以来已进行了一次本地提交。我在一个单独的窗口中创建了一个 gitk,这样我就可以验证每个提交的 SHA 以及包含的文件应该是什么样子。

首先我试过了git reset 2de1222 --hard。这给了我消息“致命:此操作必须在工作树中运行”。所以我做了一个“git status”,它显示了我的一个修改过的文件,但是在“没有为提交暂存的更改”下有一长串文件,它们都是我的应用程序的一部分。这里的 'gitk' 表明我正处于我想要移动到的提交中。工作目录中的目标文件看起来与提交 2de1222 一样。

我搜索了有关类似消息的答案并尝试了以下建议:

git checkout master

git reset --soft HEAD@{1}

git reset HEAD [my_filename]

git pull origin master

git reset --hard 2de1222  (different argument order)

在每种情况下,我都从 'git status' 得到相同的结果,以及相同的警告:“致命:此操作必须在工作树中运行”。我真的不明白为什么 git 列出了一堆假定的删除以及为什么我不在“工作树”中。

如何在 2de1222 提交后立即恢复到相同的状态(“git status”显示没有文件)并准备好更改、测试和提交我需要的一个文件?(希望不必分别处理每个“已删除”文件)?

4

3 回答 3

4

使用这个:

git checkout -- .

将丢弃所有更改。

于 2014-02-10T00:33:27.640 回答
0

运行这些命令时,您是否在带有源代码的源代码目录中?这是可能发生这种情况的原因之一,例如,如果您在 .git 目录中。

于 2012-08-13T02:26:34.013 回答
0

好吧,我退出目录,将其重命名为 ...Old 尝试克隆答案,当我发现无法克隆它时(由于我自己之前未能推送它),我将其命名回来并开始查看 .git 目录中的文件。

那里一切看起来都很好,然后当我回到终端窗口中的目录并执行“git status”时,所有被虚假“删除”的未暂存文件都消失了!

所以我不知道到底是什么修复了它(也许这只是一个 git 视图问题),但现在一切看起来都很正常。

于 2012-08-13T03:48:30.887 回答