为什么在提交和签出后文件夹留在我的本地 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
这是一个破坏性命令,特别是因为它会删除当前分支未跟踪的文件。 (它不会从跟踪这些文件的分支中删除它们。)
我在本地工作 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
这是一个破坏性命令,特别是因为它会删除当前分支未跟踪的文件。 (它不会从跟踪这些文件的分支中删除它们。)