当我尝试使用git rm --cached
时,收到以下错误:
error: the following file has staged content different from both the file and the HEAD:
我知道我可以用git rm --cached -f <filename>
来规避这个错误。但通常当我使用git rm --cached
取消暂存文件时,我不会收到此错误。
我的问题是,该文件与HEAD
有不同的暂存内容是什么意思。
答案 0 :(得分:6)
通常情况下,您获得“#st; staged and modified&#34;”的项目的状态,即:它首先被修改,然后被暂存,然后再次被修改。
必须谨慎处理此状态,否则如果您现在运行提交会导致很多误解,因为只会提交暂存更改(是的,即使在同一文件上下文中,也只会提交暂存更改),未进行分阶段的更改将保留在非暂存区域以供将来提交(如果已暂存)。
答案 1 :(得分:1)
有三个地方(有变化)值得分辨:
当您编辑和提交文件时,只有前两个问题。其中两个(非分段与分阶段)git status
向您展示了您的变化类型。
答案 2 :(得分:0)
在您的终端中,运行:
git rm --cached filename-to-untrack
那么应该忽略的将被忽略。(如果这是一个文件夹,则在 -r
后添加 rm
)答案 3 :(得分:-1)
我有您的问题,以及“我该如何解决”的问题。我想不出用 SourceTree 修复它的方法。 (通常它比 GitHub 桌面提供更多选项。)
正如 Micha 和 Luis 所指出的,您问题的字面答案是您拥有该文件的三个版本,是的,必须小心处理,因为它们都不同。换句话说,是的,暂存文件与 HEAD 不同(任何暂存文件都是如此)。版本是:
用例是,您暂存文件,然后在 IDE 中更改它,例如,然后返回删除提交以暂存实际更改的文件,并且出现此错误。
SourceTree 不允许我暂存新文件,也不会让我取消暂存文件,并给出此错误消息。由于我们有一些 CI/CD 管道设置,我不想提交文件;我想要最新的文件。
我的解决方法是使用 git CLI。一个简单的
git add offendingfile.js
成功了。为什么 SourceTree 做不到,我不确定。