我想放弃最近的更改并返回已推送的最新提交 (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”显示没有文件)并准备好更改、测试和提交我需要的一个文件?(希望不必分别处理每个“已删除”文件)?