2009-11-18 60 views
1

主支路具有这些文件和文件夹(简化):git checkout远程分支显示无关文件?

C:\Local\TickZoom\Project>ls 
file.txt   name.txt  public 

公共分支正在跟踪一个供应商库并一直子树 合并为公共文件夹中的主分支的上方。公共具有三个文件夹 仅(简化):

C:\Local\TickZoom\Project>ls 
platform providers www 

当从公众交换掌握它行为正确。

但是,当从主控切换到公共时,会发生奇怪的事情。 它拥有的所有文件和双方联合的文件夹:

C:\Local\TickZoom\Project>git checkout public 

C:\Local\TickZoom\Project>ls 
file.txt name.txt public 
platform providers www 

然而,检查git的状态是什么都没有改变。

我发现'git reset --hard'修复了公众后退。

CLUE:看来只有在做出新的提交 掌握之后才会发生这种情况。 git会做某种自动合并吗?

经过'git reset --hard'后,即使重复,也可以通过结账方式将 作为公共工作。

第一次,我认为它是固定的,但下次改变时我再次发生了 。让我再试一次 现在确保...

现在,我不能再现它。但它确实发生过两次。

另一个CLUE是,我第一次做了git reset --hard 它抱怨文件被进程锁定。

在违规项目关闭后,git reset --hard 成功,然后两个分支之间的结帐工作。

那么结账会被文件锁定和 “默默”失败混淆?这会更好,这就是问题 以同样的方式失败git reset --hard不仅仅是报告 成功和混乱的工作区。

任何其他智慧或选项设置在git结帐,以避免这种 将不胜感激。

韦恩

+0

好的,现在发现了问题。怎么修? 问题是在子文件夹中有被忽略的文件。 git正确地完成了结帐,但留下了所有被忽略的文件,并且如果有多个目录下来,它将留下所有直接去的目录。 我试过git clean -f,它仍然保留文件。 如何在分支之间切换时清除未被跟踪的文件? – Wayne 2009-11-18 04:45:54

回答

3

使用该解决

git的清洁-f -d -X

此淘到的,只有你的.gitignore忽略的文件,并包含所有这些空目录。

我现在在签出来自完全不同的存储库的分支之前,在脚本中执行此操作。

在同一软件之间切换分支时,这不是这样的问题。

Wayne

+1

在您留下来澄清问题的评论中,您问到:“如何在分支之间切换时清除*未跟踪*文件?”大写X选项不会清除“未被跟踪”的文件,它只会清除被忽略的文件。小写的x选项清除“未被跟踪的”文件(包括被忽略的文件)。这就是为什么我的答案显示小写字母x。 :) – 2009-11-21 15:03:19

6

可以使用清洁所有未跟踪文件:

git clean -dfx 

一定有真的不是你想要让你运行此命令之前任何未跟踪文件!

+0

请注意,我发现大写字母X只会清除被忽略的文件,并且只留下任何未跟踪的文件 - 这会更安全。小写字母x将删除所有被忽略和未记录的文件 - 正如您所说 - 很危险。所以你的感叹号是值得的! – Wayne 2009-11-18 05:03:14

+0

这可行,但如果你有环境的东西,如'bower_components','node_modules'或'platforms',它们也会被删除。如果您从头开始克隆git,您将会实际得到确切的结果 – Deminetix 2015-08-25 23:37:18