For untracked file I get error: Please commit your changes or stash them before you switch branches

For untracked file I get error: Please commit your changes or stash them before you switch branches

kes@work ~/c $ git status
On branch fix_typos_and_do_small_improvements
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   dancer/_global/t/lib/Global/Test/Routes.pm

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    Utils.pm

kes@work ~/c $ git checkout check_responses_from_backend
error: Your local changes to the following files would be overwritten by checkout:
    dancer/_global/t/lib/Global/Test/Routes.pm
Please commit your changes or stash them before you switch branches.
Aborting

我知道,我在我的工作目录中进行了更改,在切换分支之前我应该​​存储我的更改。我这样做了,效果很好,但现在不行。
在这里,我在当前工作目录中创建文件,我不想丢失这些更改。对于当前分支是新的,但是这个文件已经存在于我要切换到的分支中。

为什么我不能切换到不同的分支?我没有看到任何无法完成的问题。请解释这里发生了什么。谢谢。

** git 版本 2.35.3

可以。您只需要使用标志 -f 但它会导致未暂存的文件被来自目标分支的文件覆盖。这通常是不需要的,因此您必须明确说明。

Why I can not switch to different branch?

您有一个文件,在您的工作树和您当前的分支中,未跟踪. (此文件名为 dancer/_global/t/lib/Global/Test/Routes.pm。)

另一个分支名称 check_responses_from_backend 选择一个提交,其中跟踪并提交了同一个文件 1 按顺序要将 切换到 该分支,Git 必须覆盖文件的当前版本

Git 正是在告诉你这个。 Git 是说:如果我按照您的要求进行操作,您将丢失文件的内容。请请保存这些内容,如果您没有这样做,请不要怪我!

处理此问题的最简单方法是通过跟踪和提交来保存该文件的内容,或者通过将它移动到其他名称,可能完全不在您的工作树中。然后您可以切换到另一个分支,因为该文件的内容已安全地保存在其他名称下或在某个提交中。当您稍后想要取回这些内容时,可以从其他名称或您所做的提交中获取它们。


1从技术上讲,它只是“提交”:文件的 tracked-ness 取决于 git checkout 或 [=13] 期间发生的操作=].但是,如果您成功签出该分支,您将拥有一个跟踪文件,其中将包含该提交的内容。