Jac*_*k M 5 git version-control git-checkout git-reset git-clean
假设我创建(但不提交)一个文件file.txt,然后输入git checkout HEAD或git checkout HEAD .。我认为git checkout基本上用您提供的提交时的快照覆盖了您当前的工作文件,所以我认为这会删除file.txt. 但事实并非如此。为什么?
git checkout不会按设计覆盖您的工作副本。
它的工作方式与此相同,git reset --hard但有一个重要的区别 -git checkout工作目录安全,因此它不会覆盖工作目录中的现有更改。实际上,它\xe2\x80\x99s有点聪明\xe2\x80\x89\xe2\x80\x94\xe2\x80\x89它尝试在工作目录中进行简单的合并。
因此,如果您想放弃所有更改并仅从 HEAD 获取快照,请使用git reset --hard HEAD或只是git reset --hard替代。
但甚至git reset --hard不会删除您未跟踪的文件。要删除未跟踪的文件:
git clean --dry-run。它只是告诉您将删除哪些内容。这样做是因为清洁是一个危险的命令。git clean --force以最终删除未跟踪的文件。您可以在此处找到有关git checkout和 的更多详细信息,以及在此处找到有关清洁的更多详细信息。git reset
file.txt未被跟踪,对 Git 来说是“不可见的”。file.txt如果您签出的提交中存在另一个指定的文件,则它可能会被覆盖,作为签出的副作用,但 Git 不会不遗余力地删除未跟踪的文件。