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

时间:2017-08-26 22:43:33

标签: git git-commit git-checkout

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

1 个答案:

答案 0 :(得分:3)

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

以下是一个示例 - 让我们说我目前正在一个名为old_branch的干净分支上,并结帐一个名为new_branch的新分支:

git checkout -b new_branch

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

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

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

__attribute__ ((__packed__))

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