尝试变基以更正属性过滤器,但由于 "unstaged changes" 而不能

Trying to rebase to correct an attribute filter, but can't due to "unstaged changes"

问题

我的清理过滤器未能应用(与 Git 无关的单独问题)导致 Git 存储 "dirty" 文件。我修复了过滤器,但现在我需要清理文件,然后重新存储它们。

发生了什么

我从 了解到,如果文件在没有过滤器的情况下提交,而存在一个活动过滤器,那么无论我做什么,这些文件都将被视为已更改,因为哈希将无法匹配。 git reset --hardgit stash 的数量都无法解决此问题,也无法解决其他任何问题。

失败的解决方案

我的第一个想法是做一个交互式的变基。然而,即使 --force 它也不会让我。使用 force 选项,它只是说它不能完成,但没有它 Git 抱怨未暂存的更改。

cannot rebase: you have unstaged changes

没有结果的搜索

我试图寻找一种方法来强制 Git 忽略未暂存的更改,但所有导致的都是处理未暂存更改的常用方法(即 resetstash) .

我正在尝试什么

我目前正在尝试手动执行变基,但由于某种原因它没有按预期工作。现在提供更多细节还为时过早,现在是吃午饭的时间了。我现在要提到这个,因为它出现在评论中。

只剩下我能看到的了。

我能想到的唯一解决办法是将当前工作目录放在一边,然后git reset --hard last-good-commit。然后我将文件移回并提交,但是我会丢失历史记录,我不想这样。

"losing history" 我的意思是导致 "present" 的提交将丢失。我希望避免这种情况。

问题

在这种情况下如何强制变基?

答案是禁用过滤器,然后在我变基时手动应用过滤器。正如我在评论中提到的,有一点障碍。那个障碍是这样做会导致空提交。解决方案是删除提交,因为它首先是自动提交,这也是未应用过滤器的原因。

更多信息

在 ~/.bashrc 中,我为我编写的库定义了一个加载路径,过滤器脚本使用该路径。问题是自动 git 提交脚本绕过了导致清理脚本失败的环境变量。解决方案是在脚本中明确指定 lib 的路径。