1

master 分支有这些文件和文件夹(简化):

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

公共分支正在跟踪供应商存储库,并且已在上面的主分支中合并为公共文件夹的子树。public 只有三个文件夹(简化):

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

从 public 切换到 master 时,它的行为正确。

但是,当从 master 切换到 public 时,会发生一件奇怪的事情。它结合了两者的所有文件和文件夹:

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

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

但是,检查 git status 表明没有任何改变。

我发现 'git reset --hard' 修复了 public 。

CLUE:似乎这只发生在对 master 进行新的提交之后。git 会做某种自动合并吗?

在 'git reset --hard' 之后,即使重复,也可以正常结帐并返回公共工作。

第一次,我认为它已修复,但下次我进行更改时再次发生。现在让我再试一次以确保...

现在,我无法重现它。但它确实发生了两次。

另一个线索是,我第一次执行 git reset --hard 时抱怨文件被进程锁定。

关闭有问题的程序后, git reset --hard 成功,然后结帐在两个分支之间工作。

那么结帐是否会因文件被锁定和“静默”失败而感到困惑?更好的是,这就是失败的问题,就像 git reset --hard 一样,而不仅仅是报告成功并拥有一个混乱的工作空间。

在 git checkout 上设置任何其他智慧或选项以避免这种情况将不胜感激。

韦恩

4

2 回答 2

6

您可以使用以下命令清理所有未跟踪的文件:

git clean -dfx

在运行此命令之前,请确保确实没有要保留的未跟踪文件!

于 2009-11-18T04:54:59.477 回答
3

用这个来解决

git clean -f -d -X

这只会清除 .gitignore 忽略的文件以及包含它们的所有空目录。

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

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

韦恩

于 2009-11-18T05:01:34.287 回答