假设我创建(但不提交)一个文件file.txt
,然后键入git checkout HEAD
or git checkout HEAD .
。我认为git checkout
基本上用你给它的提交时的快照覆盖了你当前的工作文件,所以我原以为这会删除file.txt
. 但事实并非如此。为什么?
问问题
3168 次
2 回答
5
git checkout
不会按设计覆盖您的工作副本。
它的工作方式与工作目录相同,git reset --hard
但有一个重要区别 -工作目录安全,因此它不会覆盖工作目录中的现有更改。实际上,它更聪明一些——它尝试在工作目录中进行简单的合并。git checkout
因此,如果您想放弃所有更改并仅从 HEAD 获取快照,请使用git reset --hard HEAD
或直接git reset --hard
取而代之。
但甚至git reset --hard
不会删除您未跟踪的文件。要删除未跟踪的文件:
- 运行
git clean --dry-run
。它只是告诉您将要删除的内容。这样做是因为清洁是一个危险的命令。 - 运行
git clean --force
以最终删除未跟踪的文件。
于 2018-08-27T17:20:15.523 回答
1
file.txt
,未被跟踪,对 Git 来说是“不可见的”。如果file.txt
您签出的提交中有另一个文件,它可以作为签出的副作用被覆盖,但 Git 不会特意删除未跟踪的文件。
于 2018-08-27T17:03:19.163 回答