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

Mat*_*t W 5 git git-checkout git-commit

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

Zac*_*itu 8

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

这是一个例子——假设我目前在一个名为 的干净分支上old_branch,并且我签出了一个名为 的新分支new_branch

git checkout -b new_branch
Run Code Online (Sandbox Code Playgroud)

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

touch test.txt  # creates a new file named test.txt
git add test.txt
git commit -m "Added test.txt"
Run Code Online (Sandbox Code Playgroud)

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

git checkout old_branch
Run Code Online (Sandbox Code Playgroud)

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


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

git clean -n
Run Code Online (Sandbox Code Playgroud)

这将列出将被删除的所有未跟踪文件。如果您对列表感到满意,您可以使用以下命令删除这些文件:

git clean -f -d
Run Code Online (Sandbox Code Playgroud)

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

  • 我明白了。我要问的是为什么当我签出一个没有它的分支时,当前分支跟踪的文件不会消失?这是在我没有推送到远程但在结帐前完成添加和提交的情况下。 (2认同)