切换分支时Git不删除文件

Posted

技术标签:

【中文标题】切换分支时Git不删除文件【英文标题】:Git not removing files when switching branch 【发布时间】:2010-10-07 20:59:57 【问题描述】:

有时在使用 Git 切换分支时(版本 1.7.2.1) 它似乎没有删除我创建的特定于我切换离开的分支的文件/目录。 在运行 git status 或这些文件的任何日志条目时,它也不会将其列为未跟踪。

这只是偶尔发生,我不确定为什么或如何重置它,以便删除不属于当前分支的文件。 如果我手动删除文件,它会再次同步(如切换分支时被删除/恢复)。

有人经历过吗?

【问题讨论】:

这发生在我身上是因为使用vagrant-fsnotify 将文件系统事件转发到虚拟机。它在内部调用 VM 中的touch 来触发增量构建等。 【参考方案1】:

我也见过这个。我通常只做一个git reset --hard,然后是一个git clean -f -d,它通常可以解决问题。

当我的 IDE 锁定了我要切换的分支中的一个文件时,这似乎肯定是最常发生的。

【讨论】:

git clean 部分是我正在寻找的,谢谢!我还应该补充一点,一些文件可能已经在 TextMate 中打开以进行编辑 请小心,因为这会删除您可能拥有的任何未跟踪的文件和文件夹...... 是的,小心git clean -f -d。它也会删除您忽略的任何内容。 @dgig 我猜是git clean -x 也会删除被忽略的文件。 MacOS 上的 Visual Studio Code 也发生了同样的事情:(i) 我切换出的分支中的陈旧文件未在当前分支中跟踪,(ii) git status 返回“工作树清洁”。很奇怪。【参考方案2】:

第一:

git reset --hard

将存储库重置为上次提交的状态。 由于 git 通常不会删除文件,因此它不会跟踪那些仍然可能导致问题的文件。

然后:

git clean -d --dry-run

查看哪些文件会被删除。 我们不想失去有价值的工作。 如果可以的话:

git clean -d

【讨论】:

@baloo 是的,但它仍然非常有用(= SE 可能在其网站上存在不一致的模式和政策问题,但它绝对是一个值得深奥的问答档案。【参考方案3】:

我遇到了同样的问题,因为我在切换分支之前没有提交文件!

更多解释在这里:Why git keeps showing my changes when I switch branches (modified,added, deleted files) no matter if I run git add or not?

【讨论】:

这对我有帮助,但我不确定在简单地链接到某人的答案时是否有任何支持...... 即使提交了所有文件,我也遇到了同样的 OP 问题

以上是关于切换分支时Git不删除文件的主要内容,如果未能解决你的问题,请参考以下文章

git有merge时如何删除分支

git 切换本地分支 删除了文件

Git创建分支

git分支的创建与合并

git之创建删除分支

git merge:删除我想保留的文件!