在Git中切换分支不会删除目录

时间:2014-12-22 16:47:13

标签: git

我在Git中创建了两个分支:

git branch F1
git branch F2

接下来,我切换到F1:

git checkout F1

重命名我的UnitTests目录到Tests

git mv .\UnitTests .\Tests
git commit . -m "Moving unit tests to Tests directory"

此时,我有一个带有master目录的UnitTests分支,一个带有UnitTests目录的F2分支和一个F1分支Tests } 目录。所以,我切换到F2

git checkout F2

当我这样做时,我现在看到添加了UnitTests目录,但我也看到Tests目录(来自F1分支)仍在那里。它甚至都有相同的文件。

我可以强制通过运行

删除它
git clean -fd

但是,我想知道为什么老分支的残余物挥之不去。我已经查看了其他一些可能的重复项,但是所有这些重复都记录了我的 move 尚未提交的情况。在转换分支之前,我明确承诺转向F1。

有什么想法吗?我在Windows上运行git version 1.9.2.msysgit.0

3 个答案:

答案 0 :(得分:2)

这是因为您在UnitTests目录中有git ignore(隐藏或显式忽略)的文件或目录(可能为空)

因此,git不会删除这些文件,因此他将它们保存在目录中。

答案 1 :(得分:1)

尝试使用内置一个文件的新目录。

我猜你在测试目录中可能有一些隐藏或被忽略的文件(或子目录)。

Git不关心目录 - 只关心其中的内容,因此重命名目录与“重命名”内部文件几乎相同。

这就是为什么你不能git add在空目录上 - 并且它没有显示在git status中。

检查的一个好方法是:git clean -ndx(显示被忽略的文件和空目录)。

答案 2 :(得分:1)

我相信其他答案主要是正确,但不完全正确。想我会添加我自己的答案,以防它帮助任何其他Git新手。

首先,我检查了忽略规则和隐藏文件,但都没有出现。

切换到Tests时,F2中遗留下来的是目录。他们不会被忽视或隐藏或任何东西,他们只是因为空洞而从未登记过。似乎checkout命令将删除所有版本化文件,但保留空目录。 clean命令将清除它们。

看起来Git正在按预期工作。谢谢!