如何撤消Git中文件的checkout操作以获取未提交的更改?

3

我执行了git status,发现有一堆文件被暂存了,但它们本应该被git ignore忽略,例如.gitignore.htaccess和Drupal网站的设置文件。

我错误地使用了git checkout <file>而不是git rm <file>将它们从暂存区中删除。虽然看起来像是成功了,但我却破坏了网站。我想我现在明白了,git checkout会还原我对这些文件所做的任何更改,对吗?这些更改没有被提交,因为它们本来就不应该被跟踪。

git checkout <file>应该如何使用,它的相反操作是什么?最重要的是,我该如何撤销撤销或者接下来该怎么做?


当我想要将HEAD版本回退到工作树时,我使用git checkout <file>(甚至可以与其他版本一起使用,git checkout <revision> -- <file>)。现在,我不太明白之后发生了什么。假设文件.htaccess是其中一个文件...如果你执行了git checkout .htaccess,并且该文件不在HEAD上,那么我不知道git会如何反应。让我在这里试试。是的,git抱怨文件不存在。如果是这种情况,我看不出git checkout是如何破坏这些文件以及你最终是如何破坏网站的。 - eftshift0
我发现它不知何故撤销了我对那些从未提交的文件所做的更改。我识别出了错误,并不得不手动回到之前的状态并备份配置文件。目前,我正在将“本地”版本的配置文件添加到代码库中。 - Christia
1个回答

5
根据git的文档(链接)

要理解 git checkout -- <file> 这个命令是十分危险的。你对文件所做的任何更改都将消失——Git 只是将另一个文件复制到它上面。除非你确定不需要该文件,否则永远不要使用此命令。

因此,您无法撤消此命令。


百分之百真實...現代集成開發環境(IDE)比如VS Code,如果你還沒有關閉文件,那麼文件看起來就像是未保存的更改一樣。因此,如果你運氣好的話,可以通過這種方式恢復。但是,是的,像git rebase 一樣要謹慎地使用 git checkout。有時候試圖聰明地節省30秒鐘的時間,會變成一個有趣的30分鐘的版本控制練習,需要用到我們很少需要的所有 git 命令 :-). - Huston Hedinger

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