我在本地工作git结构中创建了一个包含文件的文件夹。我用git checkout -b创建了一个新的分支,并使用了git add。和git commit -m" ..."将这些文件添加到我的本地分支。但是,当我做git checkout master时,我创建并提交的文件夹仍然存在。为什么?我以为git commit会把文件夹及其内容放到我的本地分支中,当我签出master时将其切换出来。
答案 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__))
这是一个破坏性命令,特别是因为它删除了当前分支未跟踪的文件。 (它不会从那些跟踪这些文件的分支中删除它们。)