为什么在提交和签出后文件夹留在我的本地 git 工作目录中

Why are folders left in my local git working directory after commit and checkout

我在本地工作 git 结构中创建了一个包含文件的文件夹。我使用 git checkout -b 创建了一个新分支并使用了 git add 。和 git commit -m "..." 将这些文件添加到我的本地分支。但是,当我执行 git checkout master 时,我创建并提交的文件夹仍然存在。为什么?我以为 git commit 会将文件夹及其内容放入我的本地分支,当我结帐 master 时将其切换出去。

如果您将以前未跟踪的文件添加到新分支,然后签出另一个当前未跟踪这些文件的分支,它不会将它们从您的工作副本中删除。

举个例子——假设我目前在一个名为 old_branch 的干净分支上,我检出一个名为 new_branch:

的新分支
git checkout -b new_branch

然后,我在该分支中创建一个名为 test.txt 的新文件并将其添加到存储库中:

touch test.txt  # creates a new file named test.txt
git add test.txt
git commit -m "Added test.txt"

test.txt 文件当前由 new_branch 分支跟踪。但是,当我将分支切换回 old_branch:

git checkout old_branch

由于 test.txt 未被 old_branch 跟踪,因此它将其留在工作目录中并且不会覆盖它。这是预期的行为。如果此时执行 git status,您会注意到 test.txt 文件当前未被跟踪。


为了完成,如果您需要清除所有未跟踪文件的工作副本,您可以先执行以下操作:

git clean -n

这将列出所有将被删除的未跟踪文件。如果您对列表感到满意,您可以通过以下方式删除这些文件:

git clean -f -d

这是一个破坏性命令,特别是因为它会删除当前分支未跟踪的文件。 (它不会从跟踪这些文件的分支中删除它们。)