首页 > 解决方案 > Git checkout 认为有变化,而 git stash/reset 没有发现变化

问题描述

我在开发分支上,想使用以下命令签出另一个分支:

$ git checkout [BRANCH_NAME]

并得到以下错误:

error: Your local changes to the following files would be overwritten by checkout:
        [FILE_NAME]
Please commit your changes or stash them before you switch branches.
Aborting

但是,当我尝试存储 [FILE_NAME] 时,我收到以下错误:

git stash save [FILE_NAME]
No local changes to save

我也尝试过 git reset --hard ,但仍然遇到同样的问题。无法弄清楚是什么导致了这个问题。有任何想法吗?

标签: git

解决方案


如果你得到这个:

error: Your local changes to the following files would be overwritten by checkout:
        foo.txt
Please commit your changes or stash them before you switch branches.

但未git status报告任何有关 foo.txt被修改的信息,则必须是以下情况之一:

  • 你有一个文件,但它没有被跟踪——也就是说,它现在foo.txt不在索引中。您要求签出的提交确实有一个跟踪的. Git 警告你,你的将被另一个提交的 tracked替换,之后文件将被跟踪。(请记住,短语文件 X 已跟踪意味着路径 X 现在在索引中。索引内容随着您更改提交而更改,因此某些文件的跟踪或未跟踪状态会随着时间而改变。)foo.txt foo.txtfoo.txt

  • 或者,您有一个foo.txt被跟踪的文件(在索引中),但您已将 Git 告知该文件--assume-unchanged--skip-worktree该文件。您要求签出的提交确实有一个foo.txt,并且它与您的不匹配。Git 警告你,你的 foo.txt将被其他提交的foo.txt.

您不能存储或提交文件,因为您告诉 Git不要这样做(通过不跟踪它,或者通过设置假设不变或跳过工作树位)。尽管如此,Git 仍然为您提供了保存内容的机会,而不是粗鲁地从您要求检查的任何提交中删除文件。


推荐阅读