有什么方法可以避免 git checkout -f "warning directory is not empty"?

Any way to avoid git checkout -f "warning directory is not empty"?

我有一个 git 存储库,其中包含多个分歧很大的分支。当我说分歧时,它意味着每个分支都可以包含新的文件夹或子模块以及文件之间的很多差异。

当您签出一个分支,该分支与您在当前分支中使用 git submodule update --init 启动的子模块不同时,您可能会遇到这种问题:

 error: The following untracked working tree files would be overwritten by checkout
     path_to_submodule/my_file.txt
     path_to_submodule/second_file.txt
     ...

为了解决这个问题,我正在使用:

git checkout -f my_branch

这种方式“git 即使索引或工作树与 HEAD 不同,并且即使途中有未跟踪的文件,也要继续”(来自文档)

但是当我这样做时,我有很多警告说 git 无法删除非空目录..

warning: cannot remove my_directory. Directory not empty

因为这是一个警告,我们可以忽略它,但是当您执行 git 状态时,您将拥有所有未跟踪的目录。所以为了清洁它们,我使用:

git clean -xdff

我的目标是在两个分支之间切换一个干净的环境。这就是我使用 git clean 的原因。我知道使用这个命令的所有后果。

当你有很多子模块时,当你强制切换一个分支时,日志可能会非常混乱,包含所有这些警告。所以我想知道是否有更好的方法来做到这一点?我在 git checkout 中没有看到任何选项可以在使用 --force 时自动删除未跟踪的 files/submodules。

So I was wondering if there is a better way of doing that ?

这是我考虑的地方git worktree (that I present here)

有两个不同的文件夹,分别代表两个不同的签出分​​支,避免了在尝试从一个分支切换到另一个分支时出现的所有这些“overwritten/clean”混乱的业务。

而且您只克隆一次存储库。