git rebase-i错误:您对以下文件的本地更改将被签出覆盖,无法分离头

git rebase-i错误:您对以下文件的本地更改将被签出覆盖,无法分离头,git,Git,我尝试使用squash减少历史记录中的提交次数。我一个人工作,工作流是最简单的。除了master之外,我没有创建任何分支 以下是代码和结果: $ git rebase -i 9852344 error: Your local changes to the following files would be overwritten by checkout: smtp_credentials.ini Please commit your changes or stash them be

我尝试使用
squash
减少历史记录中的提交次数。我一个人工作,工作流是最简单的。除了
master
之外,我没有创建任何分支

以下是代码和结果:

$ git rebase -i 9852344
error: Your local changes to the following files would be overwritten by checkout:
        smtp_credentials.ini
Please commit your changes or stash them before you switch branches.
Aborting
error: could not detach HEAD
您是否有未提交的更改?-不


我不明白系统要我做什么。请解释一下。文件
smtp\u credentials.ini
位于gitingore中。它在本地和github上有不同的版本。

您一直说
设置\ U凭据.ini
.gitignore
中;这不会改变什么。
.gitignore
所做的唯一一件事就是防止意外地将未跟踪的文件添加到索引中;此文件已在索引中,因此
.gitignore
对其没有影响


更重要的是,正如其他人所指出的,错误消息非常明确。它告诉您该文件中的更改是问题所在,并告诉您如何修复(隐藏或提交更改)。由于您试图
.gitignore
这些更改,我假设您不打算提交它们;所以把它们藏起来。

让我们把答案明确地贴出来。我认为这对很多人都有用

文件smtp_credentials.ini位于.gitignore中;这改变不了什么

这对于
git
初学者来说并不明显。我在网上的任何地方都找不到。这个错误消息没有多大帮助

我认为将文件添加到
.gitignore
并执行
git rm--cached smtp\u credentials.ini应该足够了,但这还不够

在操作过程中将文件移到一边并放回原处 完成时


它成功了,用户的评论帮助很大。

该错误消息非常明确地说明了问题所在。您对
smtp\u凭据.ini
进行了未限制的更改。这些更改将丢失,因此git拒绝执行重基。执行它告诉您的操作不起作用吗?@SerhiiKushchenko显然您确实有未限制的更改,即在
smtp\u credentials.ini
中。如果它已经被跟踪,那么它被列在你的
.gitignore
中是不相关的。这是否回答了你的问题?如果您希望在回购协议中保留该文件,但同时将其忽略,那么正如您所看到的那样,这样做并不是很好。人们通常做的是跟踪
smtp_凭据.ini.template
并忽略
smtp_凭据.ini
(实际使用的凭据)。我认为您必须在操作期间将文件移到一边,完成后可以将其放回。“对于git初学者来说,这并不明显。首先,医生说:“指定有意忽略未跟踪的文件“那又怎么样?我在本地和GitHub上的文件中有不同的内容。很长一段时间都没有问题,直到我想重新整理提交历史记录。因此,无论是否在
.gitignore
中列出文件,文件都是跟踪的,不能忽略。是的,但在您努力学习之前,它并不明显。这就是为什么我说文件名
.gitignore
,是错误的文件名。正确的文件名类似于
。如果这些文件是未跟踪的文件,git不要抱怨它们,也不要通过大量的添加操作自动添加它们。在这种情况下,要么是
,要么是类似于这些行的操作。但是这个文件名太可笑了,所以他们用了一个较短但有误导性的文件名。